개발 - iOS SwiftUI

iOS SwiftUI EnvironmentObject NavigationStack 예제

개미v 2023. 10. 25. 15:39

SwiftUI에서 navigationPath 변수를 EnvironmentObject로 선언 후 사용하는 예제 입니다.

 

NavigationPathObject.Swift 클래스 생성
변수를 ObservableObject 형태로 만들어줘야 합니다

import Foundation
import SwiftUI

class NavigationPathObject : ObservableObject {
    @Published var navigationPath = NavigationPath()
}

 

처음 화면
navigationPathObject를 StateObject로 선언 합니다.
그리고 두번째 화면으로 넘어갈때에는 .environmentObject()로 두번째 화면한테 environmentObject 가 무엇인지 알려줘야 합니다.

import Foundation
import SwiftUI

struct IntroView: View {
        
    @StateObject var navigationPathObject = NavigationPathObject()
    
    var body: some View {
        NavigationStack(path: $navigationPathObject.navigationPath) {
            VStack {
            }
            .navigationDestination(for: String.self) { view in
                if view == "AgreeView" {
                    AgreeView()
                        .environmentObject(self.navigationPathObject)
                }
            }
            .task() {
                startTask()
            }
        }
    }
    
    func startTask() {
        // 페이지 이동
        navigationPathObject.navigationPath.append("AgreeView")  
    }
}

 

두번째 화면
navigationPathObject를 EnvironmentObject로 선언 합니다.

import Foundation
import SwiftUI

struct AgreeView: View {
        
    @EnvironmentObject var navigationPathObject: NavigationPathObject
    
    var body: some View {
        VStack {
        }
        .task() {
            startTask()
        }
    }
    
    func startTask() {
        
    } 
}