처음에는 커스텀 TabBarController의 init시점에 navigationControllers를 주입하는 형태로 설계했다. 하지만, tabBarController 내부에서 items를 만드는데 items는 navigationControllers.count 에 의존적이었다. 이를 동적으로도 설계하기 힘든 것이, 만약 탭이 3개(홈, 캘린더, 설정)라고 가정하면 tabBarController init 시점에 navigationController를 3개 주입할 것이고, 그에 따라 UITabBarItem을 홈, 캘린더, 설정 이렇게 3개를 만들어야 한다.
private func setupTabBarItems() {
guard let viewControllers = viewControllers else { return }
for (index, viewController) in viewControllers.enumerated() {
switch index {
case 0:
viewController.tabBarItem = UITabBarItem(
title: "홈",
image: UIImage(systemName: "house"),
tag: index
)
case 1:
viewController.tabBarItem = UITabBarItem(
title: "캘린더",
image: UIImage(systemName: "calendar"),
tag: index
)
default:
break
}
}
}
}
즉, 외부에서 주입을 하더라도, 내부에서 다시 정의해주어야 하기 때문에 init주입의 의미가 없어진다. 따라서 커스텀 TabBarController에서 NavigationController를 정의하는 것이 더 좋은 설계라고 생각을 했다.