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

SwiftUI中如何通过NavigationLink在视图间传递变量数据

SwiftUI视图间传递变量的解决方案

要实现Test视图的color变量传递到Test2视图的myColor变量,你需要调整两处核心代码,同时修正预览的初始化问题:

1. 重构Test2视图

首先,Test2里的myColor不能定义在body内部(body是计算属性,局部变量无法接收外部参数且不支持响应式更新),需要把它声明为视图结构体的属性:

import SwiftUI

struct Test2: View {
    // 声明接收外部传递的变量
    let myColor: String
    
    var body: some View {
        Text(myColor)
    }
}

#Preview {
    // 预览时传入初始值
    Test2(myColor: "")
}

2. 修改Test视图的NavigationLink传递逻辑

在Test视图中,你需要在初始化Test2时明确传入color变量作为myColor的参数,同时修正预览的初始化(因为@State变量需要初始值):

import SwiftUI

struct Test: View {
    @State var color: String = "" // 给@State变量设置初始值
    var body: some View {
        NavigationStack { // iOS 16+推荐用NavigationStack替代NavigationView
            Text("Test Page")
            
            Button(action: {
                color = "red"
            }, label: {
                Text("Red Button")
            })
            
            // 传递color到Test2的myColor参数
            NavigationLink(destination: Test2(myColor: color)) {
                Text("Next Page")
            }
        }
    }
}

#Preview {
    // 预览时初始化Test视图
    Test()
}

关键逻辑说明

  • @State是SwiftUI用来管理视图内部状态的属性包装器,当color值改变时,视图会自动刷新。
  • 传递参数时,必须对应目标视图的属性名(比如Test2(myColor: color)),而不是直接写Test2(color)——因为Test2的属性叫myColor,不是color。
  • 预览视图时,所有带参数的视图都需要传入初始值,否则会编译报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:13:26