SwiftUI - NavigationStack: Why my NavigationPath() is printing the wrong path.count?

643 Views Asked by At

I have the following basic utilization of NavigationStack with SwiftUI for iOS 16, Xcode.

The issues I am facing is that when I click back and printing the count, the root count is wrong and shows as "1" instead of always showing as "0".

Why and how to fix?

import SwiftUI

struct SettingsLink: Hashable {
    let name: String
}
struct NotificationsLink: Hashable {
    let name: String
}

struct ContentView: View {
    
    var settingsLink: [SettingsLink] = [.init(name: "Settings")]
    var notificationsLink: [NotificationsLink] = [.init(name: "Notifications")]
    
    @State private var path = NavigationPath()
    
    var body: some View {
        
        NavigationStack(path: $path) {
            
            VStack {
                NavigationLink(value: settingsLink[0]) {
                    Text(settingsLink[0].name)
                }
                NavigationLink(value: notificationsLink[0]) {
                    Text(notificationsLink[0].name)
                }
            }
            .onAppear() {
                print("Root Should Always be Zero: \(path.count)")
            }
            .navigationDestination(for: SettingsLink.self) {
                settingsLink in
                VStack {
                    Text("\(settingsLink.name)")
                }
                .onAppear() {
                    print("Settings: \(path.count)")
                }
            }
            .navigationDestination(for: NotificationsLink.self) {
                notificationsLink in
                VStack {
                    Text("\(notificationsLink.name)")
                }
                .onAppear() {
                    print("Notifications: \(path.count)")
                }
            }
        }
    }

}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }

}
0

There are 0 best solutions below