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

