我如何滥用 NavigationStack?

Aar*_*her 7 swift swiftui swiftui-navigationstack

我在尝试使用新的 NavigationStack 时有一个小代码示例,但出现错误:A NavigationLink ispresenting a value of type \xe2\x80\x9cTransactionRoute\xe2\x80\x9d but there is nomatching navigation destination from链接的位置。链接无法激活。

\n

我究竟做错了什么?

\n
    import SwiftUI\n\n    struct TransactionRoute: Identifiable {\n        let id = UUID()\n        let realm: TransactionRealm\n        let transaction: String?\n    }\n\n    extension TransactionRoute: Equatable, Hashable {\n        static func == (lhs: TransactionRoute, rhs: TransactionRoute) -> Bool {\n            lhs.id == rhs.id\n        }\n\n        public func hash(into hasher: inout Hasher) {\n            hasher.combine(id)\n        }\n    }\n\n    enum TransactionRealm: Int {\n        case basic\n        case upcoming\n        case recurring\n    }\n\n    struct ContentView: View {\n        @State var navigationPath = NavigationPath()\n\n        var body: some View {\n            NavigationStack(path: $navigationPath) {\n                VStack {\n                    Image(systemName: "globe")\n                        .imageScale(.large)\n                        .foregroundColor(.accentColor)\n                        .padding(.bottom, 24)\n                        .onTapGesture {\n                            navigationPath.append(TransactionRoute(realm: .basic, transaction: nil))\n                        }\n                    Text("Hello, world!")\n                        .onTapGesture {\n                            navigationPath.append(TransactionRoute(realm: .upcoming, transaction: nil))\n                        }\n                }\n            }\n            .navigationDestination(for: TransactionRoute.self) { route in\n                switch route.realm {\n                case .basic:\n                    Text("Basic")\n\n                case .upcoming:\n                    Text("Upcoming")\n\n                case .recurring:\n                    Text("Recurring")\n                }\n            }\n        }\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

ahe*_*eze 19

与大多数其他导航修饰符(navigationTitlenavigationBarTitleDisplayMode)一样,navigationDestination位于NavigationStack内部。可以将其视为 NavigationStack 从其大括号内获取信息。

NavigationStack(path: $navigationPath) {
    VStack {
        /// ...
    }
    .navigationDestination(for: TransactionRoute.self) { route in
        switch route.realm {
        case .basic:
            Text("Basic")

        case .upcoming:
            Text("Upcoming")

        case .recurring:
            Text("Recurring")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @malhal 开关盒不应该工作吗?我认为当数据类型不同时你只需要不同的“navigationDestination” (8认同)