Swift报错:二元运算符'*'无法应用于Double与Int类型操作数如何解决?
问题原因
- Swift 标准库中没有内置
^^作为幂运算符,直接使用未定义的自定义运算符会触发编译报错。 - 另外需注意,浮点数幂运算要匹配对应类型的实现,不能直接套用整数幂运算的逻辑。
修复方案
方案1:直接使用标准库的pow函数(最简便)
直接替换result的运算逻辑即可,代码如下:
func futureValue() { let interest = Double(interestInput.text!) ?? 0 let pv = Double(pvInput.text!) ?? 0 let years = Double(yearsInput.text!) ?? 0 let result = pv * pow(1.0 + interest, years) }
标准库中pow(_:_:)接收两个Double类型参数,正好匹配你当前的变量类型,计算结果也为Double,完全符合复利计算的需求。
方案2:自定义^^运算符(保留原有代码写法)
如果你确实想要保留^^的运算写法,可以先在全局作用域定义该运算符:
// 全局定义幂运算符,优先级高于乘法运算 infix operator ^^ : MultiplicationPrecedence func ^^ (base: Double, exponent: Double) -> Double { return pow(base, exponent) } // 原有业务代码不需要修改 func futureValue() { let interest = Double(interestInput.text!) ?? 0 let pv = Double(pvInput.text!) ?? 0 let years = Double(yearsInput.text!) ?? 0 let result = pv * (1.0 + interest) ^^ years }
注意:运算符定义必须放在全局作用域,不能写在类、结构体或者函数内部,否则其他位置无法正常调用该运算符。
内容的提问来源于stack exchange,提问作者bigmanlar
相关产品推荐
相关产品推荐

