我开始学习Swift,并且一直在YouTube上观看斯坦福大学的精彩视频讲座。如果您有兴趣或有帮助,可以使用以下链接(尽管不需要了解我的问题):
使用Swift开发iOS 8应用-2。更多Xcode和Swift,MVC
在听完讲座之后,我发现(据我所知)我的代码与视频中的代码相同,但是在我的系统上,我遇到了编译器错误。经过大量的试验和错误,我设法将代码简化为两个示例,其中一个生成错误,另一个生成或未生成错误,但是我不知道是什么真正导致了错误或如何解决该错误。
产生错误的代码是:
import UIKit class BugViewController: UIViewController { func perform(operation: (Double) -> Double) { } func perform(operation: (Double, Double) -> Double) { } }
这将产生以下编译器错误:
使用Objective-C选择器的’perform’方法’perform:’与使用相同Objective-C选择器的先前声明冲突
通过简单地删除UIViewController的子类,代码可以编译:
import UIKit class BugViewController { func perform(operation: (Double) -> Double) { } func perform(operation: (Double, Double) -> Double) { } }
其他一些可能不相关的信息:
我一半希望这是编译器中的错误,因为否则对我来说这没有任何意义。任何帮助都非常感谢!
Objective-C不支持方法重载,您必须使用其他方法名称。当您继承UIViewController时,您也继承了NSObject,并使该类可与Obj- C互操作。另一方面,Swift确实支持重载,这就是为什么在删除继承时它可以工作。