즉, 임신주차를 유저에게 입력받는 페이지에서는 앞으로 가면 태명페이지 뒤로가면 로그인페이지를 present해야하고 태명을 유저에게 입력받는 페이지는 앞으로가면 온보딩완료페이지 뒤로가면 임신주차페이지를 present해야합니다
enum OnboardingPageType: Int, CaseIterable {
case getPregnancy = 0
case getFetalNickname = 1
}
enum OnbardingFlowType: Int {
case toGetPregnacny
case toFetalNickname
case toLogin
case toCompleteOnboarding
}
extension OnboardingPageType {
var forward: OnbardingFlowType {
switch self {
case .getPregnancy:
return .toFetalNickname
case .getFetalNickname:
return .toCompleteOnboarding
}
}
var back: OnbardingFlowType {
switch self {
case .getPregnancy:
return .toLogin
case .getFetalNickname:
return .toGetPregnacny
}
}
}
전체적인 흐름을 요약해서 정리해보면 예를들어서 현재 "임신주차를 입력받는 페이지"라면 currentPage는 getPregnancy타입이고 다음버튼을 누르면 currentPage의 forward 계산속성을 호출해서 "태명입력페이지로이동"이라는 flow case를 return받게 되고 해당 flow변수를 onboardingFlow에 넣으면 didSet이 호출되어 해당페이지로 paging이 되고 해당 page의 textfield에 becomefirstresponse를 호출해 자동으로 keyboard를 present하게됩니다
반대로 현재 "임신주차를입력받는 페이지"에서 backButton을 누르게되면 currentPage에 getPregnancy의 back이라는 계산속성이 호출되고 "로그인페이지로이동"이라는 flow case를 return받게 되고 해당 flow변수를 onboardingFlow에 넣으면 didSet이 호출되어 로그인페이지로 이동하게 됩니다
제가 궁금한부분이 이런 enum case의 계산속성을 이용해서 온보딩플로우를 구현하는 방식이 괜찮은 방식인지 궁금합니다. 팀에서 이렇게 pageviewcontroller를 사용한 가장큰이유는 progressview와 button은 paging이 안되야하는 부분이어서 그런방식으로 결정했습니다!
혹여나 멘토님께서 해당뷰를 구현하신다면 어떤방식으로 설계하실지 궁금합니다
실제플로우는 pr을 하단부분 영상에 있습니다
[FEAT] 온보딩 구현 (#14) by kimscastle · Pull Request #34 · gosopt-LionHeart/LionHeart-iOS