从斯坦福公开课拿过来的demo,这里会报错,函数名相同,参数不同,demo上面的代码一样的但是能运行,我这里就会报函数名和之前的冲突了,我用的是xcode6.3正式版,课上老师用的是6.1版本。    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.   

    有个括号写错了,应该是下面这样的代码,不过结果一样,都说是冲突    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()
            }
        }
      

  2.   

    这个叫重载。
    我猜你的这个类是继承自 NSObject 的,在 Swift 1.2里,Swift对 Objective-C 的兼容性更好,而 Objective-C 是不支持重载的,所以如果你的 Swift 类有可能和 OC 冲突的话,编译器是会发出警告的,下面有两个例子:class MyObject: NSObject {
        func performOperation (operation: (Double,Double) -> Double) {
            
        }
        
        func performOperation (operation: Double -> Double) {
            
        }
    }
    class MyObject {
        func performOperation (operation: (Double,Double) -> Double) {
            
        }
        
        func performOperation (operation: Double -> Double) {
            
        }
    }其中,继承自 NSObject的类会报错,因为你继承自 NSObject 类,表示你兼容 Objective-C。
      

  3.   

    Swift 是支持函数重载的。只要形参列表或返回值类型不同就行。还有一个要注意的是外部形参名的情况:因为函数的外部形参名也是可以作为区分函数重载的因素。 也就是说,两个函数即使它们的其他成分都相同,但只要它们的外部形参名不同,系统也仍然会把它们当成函数重载。如下:
    func test(msg:String) {
             /////.....
    }
    ////函数重载
    func test(#msg:String) {
         //////.....
    }
      

  4.   

    Xcode 6的编译器有更新的,确实和以前不一样:
    如上。