swift错误中的重载函数

时间:2015-08-13 15:35:09

标签: ios xcode swift

我是swift的新手并且在以下代码中出错。我有一个功能有两个不同的参数。 Xcode(版本6)在第二个定义上给出一个错误,参数作为一个函数,它取一个值。这是代码:

func performOperation(operation: (Double, Double) -> Double) {
    if(operandStack.count >= 2){
        displayValue = operation(operandStack.removeLast(), operandStack.removeLast())
        enter()
    }
}

func performOperation(operation: Double -> Double){
    if(operandStack.count >= 1){
        displayValue = operation(operandStack.removeLast())
        enter()
    }

}

1 个答案:

答案 0 :(得分:1)

<强>更新
另一种解决方案是在方法定义(Source)之前添加>> gcf = 123; >> gcf_bits = bitget(gcf, 8:-1:1, 'uint8') gcf_bits = 0 1 1 1 1 0 1 1

private

原文答案:
看起来您的方法是在类中定义的,它继承自某个Objective-C类,例如:

private func performOperation(operation: (Double, Double) -> Double) {
    if(operandStack.count >= 2){
        displayValue = operation(operandStack.removeLast(), operandStack.removeLast())
        enter()
    }
}

private func performOperation(operation: Double -> Double){
    if(operandStack.count >= 1){
        displayValue = operation(operandStack.removeLast())
        enter()
    }

}

编译器会产生这样的错误:

  

使用Objective-C选择器'test:'与'冲突'的方法'test'   具有相同Objective-C选择器的先前声明。

要解决这个问题,你需要避免从Objective-C类继承:

class TestClass : NSObject {  
    func test(a : String) {}
    func test(a : UInt) {}
}

此变体将正常工作。

问题是Objective-C不支持方法重载,但Swift确实如此。这就是为什么你需要创建纯粹的Swift类。