CS193P: Lecture 2中的一个函数重载编译错误
在第二节课的作业中遇到一个问题。Paul在计算器的例子中展示了函数重载的用法,在编译的时候报错了。
在完成CS106A与CS106B之后,终于又回到了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
后边的参数名称不同即可。
Comments ()