Swift项目中if语句添加位置及1RM计算逻辑咨询
SwiftUI中添加条件计算1RM的实现指导
你需要把条件逻辑放在body内部、Text组件之前的局部变量定义位置,替换原来的直接公式计算。这里提供两种清晰的实现方式:
方式1:多行if-else(新手友好,逻辑直观)
直接用标准的if-else语句定义oneRepMax:
var oneRepMax: Double if reps == 1 { oneRepMax = weight } else { oneRepMax = weight*(1+(0.0333*reps))-2 }
方式2:三元运算符(简洁写法)
如果习惯简洁语法,也可以用三元表达式完成条件判断:
let oneRepMax = reps == 1 ? weight : weight*(1+(0.0333*reps))-2
修改后的完整ContentView代码
// // ContentView.swift // overload // // Created by / on 25.08.2022. // import SwiftUI struct ContentView: View { @State private var weight = 1.0 @State private var reps = 1.0 var body: some View { VStack{ Stepper("Reps : \(reps.formatted())", value: $reps, in: 1...10) TextField("Weight: \(weight.formatted())kg", value: $weight, format: .number) .keyboardType(.numberPad) // 替换为带条件的计算逻辑 var oneRepMax: Double if reps == 1 { oneRepMax = weight } else { oneRepMax = weight*(1+(0.0333*reps))-2 } Text(String(format: "Your 1RM is %.1f kg", oneRepMax)).padding() Group { Text(String(format: "Your 2RM is %.1f kg", oneRepMax/(1+(0.0333*2))+2)) Text(String(format: "Your 3RM is %.1f kg", oneRepMax/(1+(0.0333*3))+2)) Text(String(format: "Your 4RM is %.1f kg", oneRepMax/(1+(0.0333*4))+2)) Text(String(format: "Your 5RM is %.1f kg", oneRepMax/(1+(0.0333*5))+2)) Text(String(format: "Your 6RM is %.1f kg", oneRepMax/(1+(0.0333*6))+2)) Text(String(format: "Your 7RM is %.1f kg", oneRepMax/(1+(0.0333*7))+2)) Text(String(format: "Your 8RM is %.1f kg", oneRepMax/(1+(0.0333*8))+2)) Text(String(format: "Your 9RM is %.1f kg", oneRepMax/(1+(0.0333*9))+2)) Text(String(format: "Your 10RM is %.1f kg", oneRepMax/(1+(0.0333*10))+2)) } } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
额外优化提示
原代码中String(format:)重复传入了两次参数,这是多余的,修改后的代码已去掉重复项,只需要传入一次对应%.1f的数值即可。
内容的提问来源于stack exchange,提问作者timoswipe
相关产品推荐
相关产品推荐

