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
相关产品推荐
相关产品推荐

