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

SwiftUI如何将整型变量Xcode、Ycode的值传递到多个后续视图

跨视图传递变量实现方案

针对你需要在多个答题页之间共享、累加Xcode、Ycode分值的需求,有两种常用的实现方式,可以根据你的后续页面数量选择:

方案1:使用@Binding绑定传值(适合页面数量少的场景)

这种方式不需要额外改造全局代码,只需要修改目标视图和跳转逻辑即可:

  1. 先在Question2视图中声明接收的绑定变量:
struct Question2: View {
    // 声明两个绑定变量,接收前一页传递的状态
    @Binding var Xcode: Int
    @Binding var Ycode: Int
    
    var body: some View {
        // 你的第二题页面逻辑,在这里直接修改Xcode、Ycode,值会同步回前页
    }
}
  1. 修改第一题页面的NavigationLink跳转代码,把当前Xcode、Ycode的绑定传递进去:
    把你原来的destination: Question2()修改为:
destination: Question2(Xcode: $Xcode, Ycode: $Ycode)

后续如果还有Question3等页面,只需要在对应视图声明@Binding变量,跳转时传递绑定即可。

方案2:使用ObservableObject全局状态管理(适合多页面共享的场景)

如果后续还有很多道题,挨个传绑定比较繁琐,可以用全局状态管理统一维护分值:

  1. 首先创建一个继承ObservableObject的视图模型类,用来存储全局共享的分值:
class AnswerViewModel: ObservableObject {
    // 用@Published修饰的变量,修改时会自动同步到所有使用的页面
    @Published var Xcode = 0
    @Published var Ycode = 0
}
  1. 在App入口文件(带有@main标记的文件)中,把视图模型注入到全局环境:
@main
struct QuizApp: App {
    // 初始化全局视图模型
    @StateObject var answerVM = AnswerViewModel()
    
    var body: some Scene {
        WindowGroup {
            NavigationStack { // 如果你用的是旧版SwiftUI替换为NavigationView即可
                Question1() // 你的首页面
            }
            .environmentObject(answerVM)
        }
    }
}
  1. 在所有需要用到分值的页面(包括Question1、Question2以及后续所有答题页)中,声明环境变量即可直接使用:
// 在页面的属性声明部分加入这行
@EnvironmentObject var answerVM: AnswerViewModel

之后你所有用到Xcode的地方都替换为answerVM.Xcode,用到Ycode的地方替换为answerVM.Ycode即可,不需要再手动在跳转时传值,所有页面的分值会自动同步。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:15:06