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

SwiftUI NavigationStack枚举路由切换时如何传递自定义值?

在SwiftUI的NavigationStack枚举路由中传递自定义值

要实现通过枚举路由传递自定义值,核心是给枚举添加关联值,让每个路由case能携带需要传递的数据,然后在navigationDestination的回调里取出这些值,传给对应的目标视图。

修改后的完整代码

import SwiftUI

// 给枚举添加关联值,用于携带要传递的数据
enum RouteNew {
    case linkOne(String)
    case linkTwo(String)
}

struct Nav: View {
    @State private var pathNew = NavigationPath()
    
    var body: some View {
        NavigationStack(path: $pathNew) {
            // 点击时传递带关联值的路由
            NavigationLink("Link One", value: RouteNew.linkOne("来自Link One的自定义内容"))
            NavigationLink("Link Two", value: RouteNew.linkTwo("来自Link Two的自定义内容"))
            
            .navigationDestination(for: RouteNew.self) { route in
                switch route {
                case .linkOne(let customValue):
                    // 将关联值传给ViewOne
                    ViewOne(path: $pathNew, valueToImport: customValue)
                case .linkTwo(let customValue):
                    // 将关联值传给ViewTwo
                    ViewTwo(path: $pathNew, valueToImport: customValue)
                }
            }
        }
    }
}

// Swift规范:视图类型名首字母大写
struct ViewOne: View {
    @Binding var path: NavigationPath
    var valueToImport: String
    var body: some View {
        Text("View One value: \(valueToImport)")
    }
}

struct ViewTwo: View {
    @Binding var path: NavigationPath
    var valueToImport: String
    var body: some View {
        Text("View Two value: \(valueToImport)")
    }
}

struct ViewThree: View {
    @Binding var path: NavigationPath
    var valueToImport: String
    var body: some View {
        Text("View Three value: \(valueToImport)")
    }
}

关键步骤说明

  1. 修改枚举结构:给RouteNew的每个case添加关联值类型(这里用String,你可以替换成Int、自定义模型等任意类型),让路由本身承载传递的数据。
  2. 更新NavigationLink:创建NavigationLink时,传入带关联值的枚举实例,把要传递的自定义值嵌入进去。
  3. 解析关联值并传递:在navigationDestination的switch分支中,通过let customValue取出枚举的关联值,再把这个值传给目标视图的valueToImport参数。

另外补充:Swift命名规范要求视图类型名首字母大写,所以我把原代码中的viewOne这类名称改成了ViewOne,这是更规范的写法。

内容的提问来源于stack exchange,提问作者Pro Girl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 12:22:57