无法将类型 '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'.