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

SwiftUI中能否通过Route枚举向NavigationStack传递变量?

在SwiftUI NavigationStack中通过Route枚举传递变量的解决方案

你的代码错误核心在于:处理枚举.first分支时没有提取它的关联值,导致无法访问input变量。以下是修正后的完整代码及关键说明:

修正后的代码

@available(iOS 16.0, *)
enum Route: Hashable {
    case first(input: String)
    
    @ViewBuilder
    func view(_ path: Binding<NavigationPath>) -> some View {
        switch self {
        // 通过模式匹配提取关联值input
        case .first(let input):
            AView1(output: input)
        }
    }
}

@available(iOS 16.0, *)
struct AView1: View {
    // 外部传入的静态展示值用let即可,无需@State
    let output: String
    @State private var path: NavigationPath = .init()
    
    var body: some View {
        NavigationStack(path: $path) {
            VStack {
                Text(output)
                NavigationLink(value: Route.first(input: "Hello"), label: { Text("Click") })
            }
            .navigationDestination(for: Route.self) { route in
                route.view($path)
            }
        }
    }
}

关键修改说明

  1. 提取枚举关联值:在switch分支中使用case .first(let input):的语法,把枚举关联的字符串值提取出来,才能传递给视图的参数。
  2. 优化视图变量声明:如果output只是用于展示、不需要在视图内部修改,直接用let声明即可;如果后续需要修改这个值,可以改为@State并通过初始化方法赋值:
struct AView1: View {
    @State private var output: String
    
    init(output: String) {
        _output = State(initialValue: output)
    }
    
    // 其余代码不变
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 07:50:35