当前位置: 首页 > 面试题库 >

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

汝才良
2023-03-14
问题内容

我开始学习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版本上运行的版本。

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


问题答案:

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



 类似资料:
  • 问题内容: 我们正在尝试在Objective-C实现中引用swift方法。 Swift 3类: Objective-C的实现(Objective-cm): 问题答案: 如果在Xcode源文件编辑器中单击命令,则可以看到Swift方法如何映射到Objective-C。 在你的情况下 被称为 更好的Swift 3方法名称可能是 因为已经是第一个参数的参数(外部)名称。您还可以将一个属性添加到Swift

  • 在Windows下,可执行程序(Executable Program)大部分是 .exe 程序,它是一系列计算机指令和数据的集合。这些指令都是二进制形式的,CPU可以直接识别,毫无障碍;但是对于程序员,它们非常晦涩,难以记忆和使用。 计算机发展初期,程序员就是使用这些二进制形式的CPU指令来编写程序的。 直接使用CPU指令编程对程序员来说简直是噩梦,尤其是当程序比较大的时候,不但编写麻烦,需要频繁

  • 问题内容: Xcode更新后,编译器开始在工作代码上引发错误(两个函数都在AppDelegate.swift中)。 有错误: /Users/../AppDelegate.swift:14:11:方法“ application( :didFinishLaunchingWithOptions :)” 提供的Objective-C方法“ application:didFinishLaunchingWit

  • 问题内容: 我有一张桌子,像这样: 我想选择具有相同基因座和染色体的所有行。例如,第3行和第4行。一次可能有2个以上,并且它们可能不是按顺序排列的。 我尝试了这个: 但是,即使重复,它总是返回第3行,从不返回第4行。我想我缺少明显而简单的东西,但我茫然。 有人可以帮忙吗? 问题答案: 您需要了解,当您在查询中包含内容时,您是在告诉SQL合并行。您将为每个唯一值获得一行。在随后过滤这些组。通常,您可

  • 问题内容: 显然,Apple App Store不允许交叉编译器,因此开发人员需要熟悉Objective-C才能为iPhone创建应用程序。 我想知道,是否有一个交叉编译器将采用Objective- C应用程序代码并将其重建为可打包为Android的类似Java应用程序?这样,开发人员仍然只能学习一种语言(obj-c),但可以在许多设备上发布应用程序。 我知道Java端口不如本地编码的应用程序最佳

  • 我的CSS知识是中等偏低的,我正在努力获得正确的条目来改变下面的颜色(从Chrome Inspector),因为有两个(.点)和一个空隙(即在th之前) 我可以在Chrome中改变颜色,但当我将修改后的代码粘贴到自定义css区域时,它似乎不起作用。这通常工作良好,所以我只能猜测这是与两个点和空隙有关。