我在这里要做的是移动"KarvonenVal">
struct CalcProcess: View{
@EnvironmentObject var workoutManager: WorkoutManager
@State var NumAdded4 = false
@State var Age:Int
@State var ExerciseIT:Int
@State var ConstantNumber = 220
@State var RHR:Int
@State var KarvonenVal = 1
func karvonen(cn: Int, rhr: Int, age: Int, ei:Double) -> Double {
return Double((cn-age-rhr)) * (ei / 10) + Double(rhr)
}
var body: some View {
let output = karvonen(cn: ConstantNumber, rhr: RHR, age: Age, ei: Double(ExerciseIT))
let roundedDouble = Double(round(1000*output)/1000)
let KarvonenVal: String = String(format: "%.1f", roundedDouble)
VStack{
Text("(KarvonenVal)")
.foregroundStyle(.black)
}
NavigationLink(destination: SummaryView(NumAdded4: $NumAdded4, KarvonenVal: KarvonenVal), isActive: $NumAdded4, label: {Text("Next")})
}
}
}
struct KarvonenCalc_Previews: PreviewProvider {
static var previews: some View {
KarvonenCalc(KarvonenVal: Int)
}
}
然而,我一直收到错误在"KarvonenCalc_Previews"提示"无法转换Int类型的值"。将'键入到预期的参数类型'Int'"。我真的卡在这里了,不能在SummaryView中显示KarvonenVal。
struct KarvonenCalc_Previews: PreviewProvider {
static var previews: some View {
KarvonenCalc(KarvonenVal: Int)
}
}
同样在SummaryView_Preview中,我收到了类似的错误,说"无法转换字符串类型的值"。将'键入'到期望的参数类型'字符串'"
struct SummaryView_Previews: PreviewProvider {
static var previews: some View {
SummaryView(NumAdded4: .constant(false), KarvonenVal: String)
}
}
如果你使用变量/常量,将它们小写是一种惯例。对于类型,它们是大写的。
所以用'karvonenVal'代替'karvonenVal'。您还使用了两个同名的属性:
let KarvonenVal: String = String(format: "%.1f", roundedDouble)
在正文和
@State var KarvonenVal = 1
作为你的struct属性,所以编译器可能会对使用哪一个感到困惑,因为它们都是大写的,它将其读取为'类型'而不是属性。
你需要做的是解决'KarvonenVal'之间的名称冲突(将其中一个重命名为'KarvonenVal0'或任何你喜欢的东西),并使所有属性名称小写。
对于预览,您必须提供默认值以使其工作。它要求你输入一个整数你给它Integer类型。换句话说,它请求一个"对象",而你给它一个"类"。