SwiftUI如何将整型变量Xcode、Ycode的值传递到多个后续视图
跨视图传递变量实现方案
针对你需要在多个答题页之间共享、累加Xcode、Ycode分值的需求,有两种常用的实现方式,可以根据你的后续页面数量选择:
方案1:使用@Binding绑定传值(适合页面数量少的场景)
这种方式不需要额外改造全局代码,只需要修改目标视图和跳转逻辑即可:
- 先在Question2视图中声明接收的绑定变量:
struct Question2: View { // 声明两个绑定变量,接收前一页传递的状态 @Binding var Xcode: Int @Binding var Ycode: Int var body: some View { // 你的第二题页面逻辑,在这里直接修改Xcode、Ycode,值会同步回前页 } }
- 修改第一题页面的NavigationLink跳转代码,把当前Xcode、Ycode的绑定传递进去:
把你原来的destination: Question2()修改为:
destination: Question2(Xcode: $Xcode, Ycode: $Ycode)
后续如果还有Question3等页面,只需要在对应视图声明@Binding变量,跳转时传递绑定即可。
方案2:使用ObservableObject全局状态管理(适合多页面共享的场景)
如果后续还有很多道题,挨个传绑定比较繁琐,可以用全局状态管理统一维护分值:
- 首先创建一个继承ObservableObject的视图模型类,用来存储全局共享的分值:
class AnswerViewModel: ObservableObject { // 用@Published修饰的变量,修改时会自动同步到所有使用的页面 @Published var Xcode = 0 @Published var Ycode = 0 }
- 在App入口文件(带有@main标记的文件)中,把视图模型注入到全局环境:
@main struct QuizApp: App { // 初始化全局视图模型 @StateObject var answerVM = AnswerViewModel() var body: some Scene { WindowGroup { NavigationStack { // 如果你用的是旧版SwiftUI替换为NavigationView即可 Question1() // 你的首页面 } .environmentObject(answerVM) } } }
- 在所有需要用到分值的页面(包括Question1、Question2以及后续所有答题页)中,声明环境变量即可直接使用:
// 在页面的属性声明部分加入这行 @EnvironmentObject var answerVM: AnswerViewModel
之后你所有用到Xcode的地方都替换为answerVM.Xcode,用到Ycode的地方替换为answerVM.Ycode即可,不需要再手动在跳转时传值,所有页面的分值会自动同步。
内容的提问来源于stack exchange,提问作者Curiousnoes
相关产品推荐
相关产品推荐

