无法将类型 'Int.Type' 的值转换为预期的参数类型 'Int' - Swift
Cannot convert value of type 'Int.Type' to expected argument type 'Int' - Swift
我在这里要做的是使用 NavigationLink 将“KarvonenVal”的值移动到 SummaryView。
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.Type' 的值转换为预期的参数类型 'Int'”。我真的被困在这里,无法在 SummaryView 显示 KarvonenVal。
struct KarvonenCalc_Previews: PreviewProvider {
static var previews: some View {
KarvonenCalc(KarvonenVal: Int)
}
}
同样在 SummaryView_Preview,我收到类似错误“无法将类型 'String.Type' 的值转换为预期的参数类型 'String'”。
struct SummaryView_Previews: PreviewProvider {
static var previews: some View {
SummaryView(NumAdded4: .constant(false), KarvonenVal: String)
}
}
如果您使用的是 variables/constants,通常会将它们小写。对于类型,它们是大写的。
所以使用 'karvonenVal' 而不是 'KarvonenVal'。您还使用了两个同名的属性:
let KarvonenVal: String = String(format: "%.1f", roundedDouble)
正文和
@State var KarvonenVal = 1
就在你的结构 属性 的正上方,因此编译器可能对使用哪个感到困惑,并且由于它们都是大写的,因此它会将其读取为 'types' 而不是属性。
您需要做的是解决 'KarvonenVal' 之间的名称冲突(将其中一个重命名为 'KarvonenVal0' 或您喜欢的任何名称)并使所有 属性 名称小写。
对于预览,您必须提供默认值才能正常工作。它基本上是在询问您一些整数类型的数字,而您给它的是整数类型。换句话说,它要求 'an object' 而你给它 'a class'.
我在这里要做的是使用 NavigationLink 将“KarvonenVal”的值移动到 SummaryView。
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.Type' 的值转换为预期的参数类型 'Int'”。我真的被困在这里,无法在 SummaryView 显示 KarvonenVal。
struct KarvonenCalc_Previews: PreviewProvider {
static var previews: some View {
KarvonenCalc(KarvonenVal: Int)
}
}
同样在 SummaryView_Preview,我收到类似错误“无法将类型 'String.Type' 的值转换为预期的参数类型 'String'”。
struct SummaryView_Previews: PreviewProvider {
static var previews: some View {
SummaryView(NumAdded4: .constant(false), KarvonenVal: String)
}
}
如果您使用的是 variables/constants,通常会将它们小写。对于类型,它们是大写的。
所以使用 'karvonenVal' 而不是 'KarvonenVal'。您还使用了两个同名的属性:
let KarvonenVal: String = String(format: "%.1f", roundedDouble)
正文和
@State var KarvonenVal = 1
就在你的结构 属性 的正上方,因此编译器可能对使用哪个感到困惑,并且由于它们都是大写的,因此它会将其读取为 'types' 而不是属性。
您需要做的是解决 'KarvonenVal' 之间的名称冲突(将其中一个重命名为 'KarvonenVal0' 或您喜欢的任何名称)并使所有 属性 名称小写。
对于预览,您必须提供默认值才能正常工作。它基本上是在询问您一些整数类型的数字,而您给它的是整数类型。换句话说,它要求 'an object' 而你给它 'a class'.