iOS开发学习——解决Xcode7 Swift2中odjc的函数重载问题
最近在学习斯坦福大学白胡子老头去年的iOS8的开发教程,跟着他的视频教程走,刚开始不久就发现自己栽进了坑里,同样的代码,为啥我的就会报错呢:
错误内容是:
/Users/smslit/Documents/workspace/iOS/learn/Calculator/Calculator/ ViewController.swift:55:10: Method ‘performOperation’ with Objective-C selector ‘performOperation:’ conflicts with previous declaration with the same Objective-C selector
最后在新手求助:同一个名下两种功能的func,是不是不能自动判断了找到了原因:
这是因为你的viewcontroller 继承了UIViewController.而UIViewController 继承自oc的NSObject. 在swift 中被修饰成@objc class. 那么就必须要遵循oc的selector,在oc中是不支持方法重载的。所以会报上面的错误。这跟使用的Xcode版本有关,白胡子老头使用的版本较低,而我使用的是Xcode7,已经是Swift2了,与之前有好多不同的地方。
在Xcode7的Swift2中有两种解决方法:
-
一种是使用@objc(newNameMethod:),如下
func methodOne(par1, par2) {...} @objc(methodTow:) func methodOne(par1) {...}
-
另一种是使用 @nonobjc,如下:
func methodOne() {...} @nonobjc func methodOne() {...}