AppFlowCoordinator

final class AppFlowCoordinator : Coordinator
extension AppFlowCoordinator: CoordinatorFinishDelegate

앱의 최초 화면 플로우를 정하는 클래스 입니다.

시작할 화면 플로우를 childCoordinator에 저장 후 해당 플로우를 시작합니다.

  • Declaration

    Swift

    var type: CoordinatorType { get }
  • Declaration

    Swift

    weak var finishDelegate: CoordinatorFinishDelegate?
  • Declaration

    Swift

    weak var tabBarDelegate: TabBarDelegate?
  • Declaration

    Swift

    var childCoordinators: [Coordinator]
  • Declaration

    Swift

    var navigationController: UINavigationController
  • Declaration

    Swift

    var viewTitle: String?
  • Declaration

    Swift

    private let appDIContainer: AppDIContainer
  • 로그인 분기 처리입니다.

    연산 프로퍼티(Computed Property)를 사용하였고, UserDefaults에 Bool 값을 저장 및 불러옵니다.

    Declaration

    Swift

    private var isLogin: Bool { get set }
  • 최초 Scene Delegate에서 초기화 시킬 init 입니다.

    Declaration

    Swift

    init(
        navigationController: UINavigationController,
        appDIContainer: AppDIContainer
    )

    Parameters

    navigationController

    최초 navigationController를 주입합니다.

    appDIContainer

    networkService, 화면 Delegate를 생성하는 App DI Container를 주입합니다.

  • 조건에 맞는 flow를 실행하는 메서드 입니다.

    Declaration

    Swift

    func start()
  • login flow coordinator를 생성하는 메서드 입니다.

    • login DI Conatiner를 생성 후 해당 DI Container에서 LoginFlowCoordinator를 생성해서, 해당 FlowCoordinator를 childCoordinators 배열에 append해줍니다.
    • login flow coordinator의 finishDelegate를 CoordinatorFinishDelegate protocol를 채택한 App DI Container으로 주입해서 DIP을 준수합니다.
      • 해당 Protocol은 login flow coordinator가 삭제될 때 알려주기 위함 입니다.

    Declaration

    Swift

    private func showLoginFlow()
  • Tabbar Flow Coordinator를 생성하는 메서드 입니다.

    • TabBar Flow Coordinator와 각 화면에 대한 DI Container, FlowCoordinator를 생성 합니다.
    • 이때 각 화면 flow coordinator는 tabBarFlowCoordinator setupTabs메서드를 활용해서 주입해주고, tabBarFlowCoordinator를 childCoordinators에 append 해줍니다.

    Declaration

    Swift

    private func showTab()
  • Declaration

    Swift

    func coordinatorDidFinish(childCoordinator: Coordinator)