You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用NavigationStack触发导航目标匹配错误,问题出在哪?

解决NavigationStack导航目标匹配失败的问题

错误现象

NavigationLink 正在展示类型为“TransactionRoute”的值,但从该链接位置无法找到匹配的导航目标,链接无法激活。

问题原因

你把navigationDestination修饰符应用在了NavigationStack的外部,而SwiftUI要求导航目标必须属于当前导航栈的内部上下文,这样导航栈才能识别并匹配对应的路由类型。

修正后的代码

import SwiftUI

struct TransactionRoute: Identifiable {
    let id = UUID()
    let realm: TransactionRealm
    let transaction: String?
}

extension TransactionRoute: Equatable, Hashable {
    static func == (lhs: TransactionRoute, rhs: TransactionRoute) -> Bool {
        lhs.id == rhs.id
    }

    public func hash(into hasher: inout Hasher) {
        hasher.combine(id)
    }
}

enum TransactionRealm: Int {
    case basic
    case upcoming
    case recurring
}

struct ContentView: View {
    @State var navigationPath = NavigationPath()

    var body: some View {
        NavigationStack(path: $navigationPath) {
            VStack {
                Image(systemName: "globe")
                    .imageScale(.large)
                    .foregroundColor(.accentColor)
                    .padding(.bottom, 24)
                    .onTapGesture {
                        navigationPath.append(TransactionRoute(realm: .basic, transaction: nil))
                    }
                Text("Hello, world!")
                    .onTapGesture {
                        navigationPath.append(TransactionRoute(realm: .upcoming, transaction: nil))
                    }
            }
            // 将navigationDestination移到NavigationStack内部
            .navigationDestination(for: TransactionRoute.self) { route in
                switch route.realm {
                case .basic:
                    Text("Basic")

                case .upcoming:
                    Text("Upcoming")

                case .recurring:
                    Text("Recurring")
                }
            }
        }
    }
}

关键修改点

  • 把.navigationDestination(for: TransactionRoute.self)从NavigationStack的外部修饰,改为添加到NavigationStack内部的根视图(VStack)上,确保导航栈能正确识别该路由类型的目标视图。

内容的提问来源于stack exchange,提问作者Aaron Bratcher

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 15:40:23