如何提示在Swift中作为参数传递哪个重写函数?

时间:2015-03-16 01:25:40

标签: swift

我在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变体,并假设我想要一元运算符,但我不确定。

如何调试此问题,或者,如果我对原因的猜测是正确的,请提示系统我想要两个参数的中缀运算符?

1 个答案:

答案 0 :(得分:1)

我不知道为什么编译器无法解决此问题,但要解决此问题,您可以明确告诉它使用Double版本的{{1} }:

+