我在Swift为斯坦福大学的Swift MOOC建立一个基本的计算器。
我有一个switch语句,我通过中缀算术运算(作为连接按钮的逻辑):
let operation = sender.currentTitle!
var op_result = false
switch operation {
case "+": op_result = performOperation( + )
case "−": op_result = performOperation( - )
case "×": op_result = performOperation( * )
case "÷": op_result = performOperation( / )
default:
break
}
这将带有签名的函数:
func performOperation (op: (Double, Double) -> Double) -> Bool
上面的代码工作正常 - 直到我开始尝试添加平方根(单参数)操作。我添加了一个重写的performOperation函数:
func performOperation (op: (Double) -> Double) -> Bool
只要存在这个被覆盖的函数,我就会在上面的加号和减号情况下出现错误:" Double不是UInt8的子类型"
我的猜测是类型推断逻辑正在看单个参数performOperation变体,并假设我想要一元运算符,但我不确定。
如何调试此问题,或者,如果我对原因的猜测是正确的,请提示系统我想要两个参数的中缀运算符?
答案 0 :(得分:1)
我不知道为什么编译器无法解决此问题,但要解决此问题,您可以明确告诉它使用Double
版本的{{1} }:
+