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

SwiftUI/Xcode中创建NavigationLink导航链接报错问题咨询

代码问题排查

  • NavigationLink的destination参数语法错误:你当前写的destination:codeName.(model: .codeName)完全不符合Swift语法规则,要跳转至SelectionView(codeName: "Y")直接将该视图实例作为destination参数值传入即可
  • 非法嵌套List:你在外层List内部又写了一个List,不仅布局会出现异常,也不符合多级跳转的逻辑
  • 变量未定义:代码中使用的models数据源、.codeName枚举/值均没有显式定义,会直接触发编译报错
  • 内层SelectionView未绑定跳转逻辑:如果需要点击SelectionView跳转到对应的DetailView,需要将SelectionView包裹在NavigationLink中,指定目标为DetailView即可

修正后代码(兼容iOS 13及以上版本,保留NavigationView)

import SwiftUI

// 先定义你的数据模型,这里做示例实现
struct ItemModel: Identifiable {
    let id = UUID()
    let codeName: String
}
// 示例models数据源
let models: [ItemModel] = [
    ItemModel(codeName: "A"),
    ItemModel(codeName: "B"),
    ItemModel(codeName: "C")
]

// 你提到的SelectionView示例实现
struct SelectionView: View {
    let codeName: String
    var body: some View {
        List {
            NavigationLink {
                DetailView(codeName: codeName)
            } label: {
                Text("查看\(codeName)的详情")
            }
        }
        .navigationTitle(codeName)
    }
}

// 你提到的DetailView示例实现
struct DetailView: View {
    let codeName: String
    var body: some View {
        Text("这是\(codeName)的详情页")
            .navigationTitle("详情")
    }
}

struct ContentView: View {
    var body: some View {
        NavigationView {
            List {
                // 固定跳转到codeName为Y的SelectionView
                NavigationLink {
                    SelectionView(codeName: "Y")
                } label: {
                    Text("Y")
                }
                
                // 遍历数据源生成列表项,点击跳转到对应SelectionView
                ForEach(models) { model in
                    NavigationLink {
                        SelectionView(codeName: model.codeName)
                    } label: {
                        Text(model.codeName)
                    }
                }
            }
            .navigationTitle("首页")
        }
    }
}

#if DEBUG
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
            .previewLayout(.device)
            .preferredColorScheme(.dark)
            .previewDevice("iPhone 13 Pro Max")
    }
}
#endif

iOS 16+ 推荐写法(替换已弃用的NavigationView为NavigationStack)

只需要将ContentView的导航部分替换即可,路由管理更便捷:

struct ContentView: View {
    var body: some View {
        NavigationStack {
            List {
                NavigationLink("Y", value: "Y")
                ForEach(models) { model in
                    NavigationLink(model.codeName, value: model.codeName)
                }
            }
            .navigationTitle("首页")
            .navigationDestination(for: String.self) { codeName in
                SelectionView(codeName: codeName)
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Wen Love Howard

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:36:04