You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift遇Cannot convert Int.Type to expected argument type Int报错如何解决

问题原因&解决方案

1. 预览报错修复

你遇到的两个预览报错本质是同一个问题:构造视图实例时,你传入的是Int、String这类类型本身,而编译器要求你传入对应类型的具体值。
直接替换对应预览代码即可:

KarvonenCalc(CalcProcess)预览修复

注意你的视图定义名是CalcProcess,如果是命名笔误改为对应即可,预览需要传入所有无默认值的参数的具体值:

struct CalcProcess_Previews: PreviewProvider {
    static var previews: some View {
        // 传入Age、ExerciseIT、RHR的测试数值即可
        CalcProcess(Age: 25, ExerciseIT: 6, RHR: 55)
    }
}

SummaryView预览修复

给KarvonenVal传入任意测试用的字符串即可:

struct SummaryView_Previews: PreviewProvider {
    static var previews: some View {
        SummaryView(NumAdded4: .constant(false), KarvonenVal: "138.2")
    }
}

2. 传值失效&布局问题修复

你现有代码存在两个隐藏问题会导致传值失败/跳转异常:

  • 变量名冲突:顶部@State声明的KarvonenVal是Int类型,body内又重新定义了同名的String局部常量,容易引发类型不匹配错误
  • 布局层级错误:NavigationLink放在VStack外层,和VStack并列,SwiftUI的body仅支持返回单个根视图,会导致跳转逻辑失效
    修改后的CalcProcess完整代码:
struct CalcProcess: View{
    @EnvironmentObject var workoutManager: WorkoutManager

    @State var NumAdded4 = false
    @State var Age:Int
    @State var ExerciseIT:Int
    @State let ConstantNumber = 220
    @State var RHR:Int
     
    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 formattedKarvonenVal = String(format: "%.1f", roundedDouble)
           
        VStack{
            Text("\(formattedKarvonenVal)")
                .foregroundStyle(.black)
            // NavigationLink放到VStack内部,作为子视图
            NavigationLink(
                destination: SummaryView(NumAdded4: $NumAdded4, KarvonenVal: formattedKarvonenVal),
                isActive: $NumAdded4,
                label: { Text("Next") }
            )
        }
    }
}

3. SummaryView参数校验

确保SummaryView的KarvonenVal参数类型为String,和传入值类型匹配即可:

struct SummaryView: View {
    @Binding var NumAdded4: Bool
    // 类型和传入的格式化字符串保持一致
    var KarvonenVal: String
    
    var body: some View {
        // 直接使用即可显示
        Text("计算结果:\(KarvonenVal)")
    }
}

内容的提问来源于stack exchange,提问作者Epicminetime

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 21:06:01