如何在 struc 中实现 func 计算?

how do I implement func calculation inside struc?

我正在尝试创建一个计算 Karvonen 值的 Apple Watch 应用程序。

当我将 func 计算插入 struct 时,我一直收到 Swift 编译器错误:

[Type "FourthView"does not conform to protocol "View"]

我知道我不应该在func里面计算,但我不知道如何解决这个问题。

struct FourthView: View{

    @Binding var fourthScreenShown:Bool
    //@State var RHR:Int
    //@State var weight:Int
    @State var Age:Int
    @State var ExerciseIT = 0.3
    @State var ConstantNumber = 220
    @State var RHR = 68
    
    func karvonen(cn: Int, rhr: Int, age: Int, ei:Double) -> Double {
        return Double((cn-age-rhr)) * ei + Double(rhr)
        let output = karvonen(cn: ConstantNumber, rhr: RHR, age: Age, ei: ExerciseIT)
        
        var body: some View {
            VStack{
                Text("Your Kar is")
                    .font(.system(size: 14))
                Text("\(output)")
                    .font(.system(size: 40))
            
            }
        }
    }
}

var body 必须存在于 struct 的顶层才能符合 View。现在,您的 func.

里面有 var body
struct FourthView: View{
    
    @Binding var fourthScreenShown:Bool
    @State var Age:Int
    @State var ExerciseIT = 0.3
    @State var ConstantNumber = 220
    @State var RHR = 68
    
    func karvonen(cn: Int, rhr: Int, age: Int, ei:Double) -> Double {
        return Double((cn-age-rhr)) * ei + Double(rhr)
    }
    
    var body: some View {
        VStack{
            Text("Your Kar is")
                .font(.system(size: 14))
            Text("\(karvonen(cn: ConstantNumber, rhr: RHR, age: Age, ei: ExerciseIT))")
                .font(.system(size: 40))
        }
    }
    
}

另一个等效版本(如果你必须在多个地方使用结果可能有用):

var body: some View {
    let output = karvonen(cn: ConstantNumber, rhr: RHR, age: Age, ei: ExerciseIT)
    VStack{
        Text("Your Kar is")
            .font(.system(size: 14))
        Text("\(output)")
            .font(.system(size: 40))
    }
}

与您的问题无关,但对未来有提示:在 Swift 中,通常 variables/parameters 是驼峰式的。因此,您的 AgeExerciseIT 等将是 ageexerciseIT

此外,除非您要更改值,否则不需要在所有参数前加上 @StateConstantNumber,例如(如果名字准确的话),可能不需要是@State.