如何在 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 是驼峰式的。因此,您的 Age
、ExerciseIT
等将是 age
、exerciseIT
等
此外,除非您要更改值,否则不需要在所有参数前加上 @State
。 ConstantNumber
,例如(如果名字准确的话),可能不需要是@State
.
我正在尝试创建一个计算 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 是驼峰式的。因此,您的 Age
、ExerciseIT
等将是 age
、exerciseIT
等
此外,除非您要更改值,否则不需要在所有参数前加上 @State
。 ConstantNumber
,例如(如果名字准确的话),可能不需要是@State
.