장점: Binding 변수를 다음 뷰에게 넘겨줄 수 있다.
특징: homePath에 쌓이지 않는다.
상태값이 두 개 이상인 뷰 전환하는 방법
```swift
struct StepView: View {
enum StepViewState {
case FIRST
case SECOND
}
let state: StepViewState
init(state: StepViewState) {
self.state = state
}
```
StepView는 두 개의 state가 존재합니다. enum으로 state를 구분해주었습니다.
그럼 NavigationStack에서 어떻게 상태를 구분해서 StepView를 부를 수 있을까요?
```swift
public enum HomeRoute {
case MainView
case StepView_First
case StepView_Second
...
}
```
HomeRoute에 StepView에 대한 두가지 값을 정의해줍니다.
```swift
HomeView()
.navigationDestination(for: HomeRoute.self) { route in
switch(route) {
case .StepView_First: StepView(state: .FIRST)
case .StepView_Second: StepView(state: .SECOND)
```
.navigationDestination(for:) 함수에 case를 나눠주면 내가 원하는 StepView를 부를 수 있습니다.
고민
꼭 NavigationStack을 사용해야 rootView로 이동할 수 있는지 모르겠다
Binding 값을 다음뷰에 넘겨주는 경우가 있는데 이거 넘겨주면 안된다고 생각함.
📌 Issue
팀 모두가 확인할 수 있도록 테스트플라이트에 공개한다
📝 To-do
ViewModel을 활용한 NavigationStack
HomeRoute 배열을 관리해주는 HomeNavigationViewModel와 HomeRoute Enum을 정의한다
1️⃣ MainView에 ViewModel을 선언한다. 2️⃣ NavigationStack를 선언한다. homeNavigation.homePath에 새로운 뷰가 추가되면 화면에 새로운 뷰가 생성된다. 3️⃣ .navigationDestination(for:) 함수는 view를 전환시킨다 4️⃣ 다음뷰가 homeNavigation에 접근해야하기 때문에 environmentObject로 전달한다.
뷰전환방법1
1️⃣ homeNavigation을 선언한다 2️⃣ homeNavigation.navigate 함수를 통해 이동하고 싶은 뷰를 추가한다
뷰전환방법2
NavigationLink를 사용해서 뷰 전환을 해줄 수 있다. 장점: Binding 변수를 다음 뷰에게 넘겨줄 수 있다. 특징: homePath에 쌓이지 않는다. 그래서 dimiss 버튼을 눌렀을 때 전전단계의 뷰로 넘어갈 수도 있다
뷰전환방법3
장점: Binding 변수를 다음 뷰에게 넘겨줄 수 있다. 특징: homePath에 쌓이지 않는다.
상태값이 두 개 이상인 뷰 전환하는 방법
```swift struct StepView: View { enum StepViewState { case FIRST case SECOND } let state: StepViewState init(state: StepViewState) { self.state = state } ``` StepView는 두 개의 state가 존재합니다. enum으로 state를 구분해주었습니다. 그럼 NavigationStack에서 어떻게 상태를 구분해서 StepView를 부를 수 있을까요? ```swift public enum HomeRoute { case MainView case StepView_First case StepView_Second ... } ``` HomeRoute에 StepView에 대한 두가지 값을 정의해줍니다. ```swift HomeView() .navigationDestination(for: HomeRoute.self) { route in switch(route) { case .StepView_First: StepView(state: .FIRST) case .StepView_Second: StepView(state: .SECOND) ``` .navigationDestination(for:) 함수에 case를 나눠주면 내가 원하는 StepView를 부를 수 있습니다.고민
꼭 NavigationStack을 사용해야 rootView로 이동할 수 있는지 모르겠다
Binding 값을 다음뷰에 넘겨주는 경우가 있는데 이거 넘겨주면 안된다고 생각함.참고
https://medium.com/@sarimk80/navigationstack-with-viewmodel-c0ec223cf16b