一尘不染

编译器错误:具有Objective-C选择器的方法与具有相同Objective-C选择器的先前声明冲突

swift

我开始学习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) {
    }
}

其他一些可能不相关的信息:

  • 我最近升级到优胜美地。
  • 当我安装Xcode时,最终得到一个Beta版本(版本6.3(6D543q)),因为(如果我没有记错的话)这是我需要在OS X版本上运行的版本。

我一半希望这是编译器中的错误,因为否则对我来说这没有任何意义。任何帮助都非常感谢!


阅读 195

收藏
2020-07-07

共1个答案

一尘不染

Objective-C不支持方法重载,您必须使用其他方法名称。当您继承UIViewController时,您也继承了NSObject,并使该类可与Obj-
C互操作。另一方面,Swift确实支持重载,这就是为什么在删除继承时它可以工作。

2020-07-07