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

SwiftUI中如何在不同视图间引用常量oneRepMax的值?

解决SwiftUI视图间传递1RM计算值的问题

要把OneRepMaxCalculator里的oneRepMax常量传递给ProgressiveOverload视图,只需三步简单修改:

1. 给ProgressiveOverload添加接收参数的属性

在ProgressiveOverload结构体里新增存储属性,用来接收父视图传来的1RM值:

import SwiftUI
    
struct ProgressiveOverload: View {
    // 新增属性:接收传入的1RM值
    let oneRepMax: Double
    
    var body: some View {
        NavigationView{
            Form{
                // 直接使用传入的属性值,保持和父视图一致的格式化显示
                Text("Your 1RM is \(oneRepMax.formatted())kg")
            }
            .navigationBarTitle("Progressive Overload")
        }
    }
}

struct ProgressiveOverload_Previews: PreviewProvider {
    static var previews: some View {
        // 预览时必须传入示例值,否则会报错
        ProgressiveOverload(oneRepMax: 100.0)
            .preferredColorScheme(.dark)
    }
}

2. 在跳转时传递oneRepMax值

回到OneRepMaxCalculator代码,找到跳转用的NavigationLink,把计算好的oneRepMax作为参数传给ProgressiveOverload:

// 原代码
NavigationLink(destination: ProgressiveOverload()) {
    Text("Apply Progressive Overload")
}

// 修改后的代码
NavigationLink(destination: ProgressiveOverload(oneRepMax: oneRepMax)) {
    Text("Apply Progressive Overload")
}

额外说明

如果后续需要在ProgressiveOverload里修改该值并同步回OneRepMaxCalculator,可以把属性改成@Binding var oneRepMax: Double,同时父视图传递时用$oneRepMax。但当前场景仅需展示计算好的常量,用let类型的普通属性完全够用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:06:18