Team-cheonhamujeok / AtchI-iOS

AI치매 진단 및 예방 솔루션 ✨엣치✨입니다
4 stars 0 forks source link

코디네이터 패턴(StackCoordinator) 사용법 #88

Open dodo849 opened 1 year ago

dodo849 commented 1 year ago

코디네이터 적용에 필요한 베이스들을 StackCoordinator라는 패키지로 분리했습니다. 의존성은 추가되어 있습니다.

사용법

1. LinkProtocol 구현

enum HomeLink: LinkProtocol {

    case healthInfo
    case quiz(_ : Quiz, _ : BaseCoordinator<QuizLink>)

    func matchView() -> any View {
        switch self {
        case .healthInfo:
            return HealthInfoView()
        case .quiz(let quiz, let coordinator):
            return QuizBuilder(
                quiz: quiz,
                coordinator: coordinator
            )
        }
    }
}

2. BuilderProtocol구현

struct HomeBuilder: BuilderProtocol {

    var coordinator: BaseCoordinator<HomeLink>

    var body: some View {
        BaseBuilder(coordinator: coordinator) {
            HomeView(
                viewModel: HomeViewModel(coordinator: coordinator),
                predictVM: PredictionVM()
           )
        }
    }
}

3. 화면전환

self.coordinator.path.append(HomeLink.healthInfo)

3-1. 풀스크린모달

self.coordinator.sheet = HomeLink.healthInfo

⚠️ 주의사항

NaviagtionStack이 루트에 선언되어 있기 때문에 하위뷰에서 다시 선언하면 오류가 발생합니다. (크래쉬 납니다) 따라서 절대로 NavigationStack을 재선언하지 마세요.

루트에서 path를 push하는게 아니라 하위에서 새로운 흐름을 생성해서 가져가는 방식도 있으면 좋을 것 같은데 아이디어가 아직 없네요. 좋은 생각 있으시면 알려주세요~~


아직 적용 안된 부분 (전체에 영향 없는 파트라 추후 설정하겠습니다)