iOS开发学习——解决Xcode7 Swift2中odjc的函数重载问题

最近在学习斯坦福大学白胡子老头去年的iOS8的开发教程,跟着他的视频教程走,刚开始不久就发现自己栽进了坑里,同样的代码,为啥我的就会报错呢:

1

错误内容是:

/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了,与之前有好多不同的地方。

Compiler error: Method with Objective-C selector conflicts with previous declaration with the same Objective-C selector找到了解决办法:

在Xcode7的Swift2中有两种解决方法:

  • 一种是使用@objc(newNameMethod:),如下

    func methodOne(par1, par2) {...}
    
    @objc(methodTow:)
    func methodOne(par1) {...}
    
  • 另一种是使用 @nonobjc,如下:

    func methodOne() {...}
    
    @nonobjc
    func methodOne() {...}
    

swift

452 字

2015-11-18 22:00 +0800