CS193P: Lecture 2中的一个函数重载编译错误

在第二节课的作业中遇到一个问题。Paul在计算器的例子中展示了函数重载的用法,在编译的时候报错了。

CS193P: Lecture 2中的一个函数重载编译错误

在完成CS106ACS106B之后,终于又回到了CS193P的课程之中。

在第二节课的作业中遇到一个问题。Paul在计算器的例子中展示了函数重载的用法,具体是performOperation函数存在两种用法,一种接受2个参数,另一种接受1个参数:

func performOperation(operation: (Double, Double) -> Double)<br></br>
func performOperation(operation: Double -> Double

但是在编译的时候编译器报错了:

Method ‘performOperation’ with Objective-C selector ‘performOperation:’ conflicts with previous declaration with the same Objective-C selector

检索了一下,大致原因是“Obj-C不支持方法重载”(参看来源2楼)。而教程中Paul使用的Xcode与我现在使用的不同,我用的6.3.2版本更新了Swift 1.2版,对于type-based overloading进行了更加严格的检查。因此这段代码编译出错。

解决方案也有,利用@objc修饰符,它起的作用是为Objective-C重新声明方法名称:

@objc(operationOne:) func performOperation(operation: (Double, Double) -> Double)
@objc(operationTwo:) func performOperation(operation: Double -> Double

只要@objc后边的参数名称不同即可。