@MainActor
struct NavigationStack<Data, Root> where Root : View
위의 형태와 같은 형태이며 간단하게 설명하자면
@MainActor 는 메인스레드에서 활동하는 Actor 입니다.
즉 기본적인 DispatchQueue.main 와 동일한 활동을 하는 singleton형태의 Actor이다.
이유 설명은 기본적인 다중 스레드 사용 환경으로 인해 own state 를 가질 수 있도록 하는 형태이다.
shared mutable state를 표현 하기 위해서 Coroutine과 닮은 형태로 만든 것 같다.
where Root : view 는 Root가 Generic Type 인데 View를 호출하는 프로토콜을 따르는 제약이다.
struct NavigationLink<Label, Destination> where Label : View, Destination : View
// Pushable stack
@State private var presentedParks : [Park] = []
var body : some View {
NavigationStack(path: $presentedParks) {
List(parks) { park in
NavigationLink(park.name, value: park)
}.navigationDestination(for: Park.self) { park in
ParkDetails(park: park)
}
}
위와 같은 형태로 사용됩니다.