我开始学习 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) { } }
这会产生以下编译器错误:
方法 ‘perform’ 与 Objective-C 选择器 ‘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 确实支持重载,这就是为什么当您删除继承时它可以工作的原因。