-2

我在这里要做的是使用 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)
    }
}
4

1 回答 1

1

如果您使用变量/常量,则将它们小写是惯例。对于类型,它们是大写的。

所以使用“karvonenVal”而不是“KarvonenVal”。您还使用了两个具有相同名称的属性:

let KarvonenVal: String = String(format: "%.1f", roundedDouble)

在身体和

@State var KarvonenVal = 1

就在上面作为您的 struct 属性,因此编译器可能对使用哪一个感到困惑,并且由于它们都是大写的,因此它将其读取为“类型”而不是属性。

您需要做的是解决“KarvonenVal”之间的名称冲突(将其中一个重命名为“KarvonenVal0”或您喜欢的任何名称)并使所有属性名称小写。

对于预览,您必须提供默认值才能使其正常工作。它基本上是在要求您输入一些整数,而您要给它整数类型。换句话说,它要求“一个对象”,而您正在给它“一个类”。

于 2021-10-05T20:22:04.363 回答