覆盖Swift 2中的func错误

时间:2015-06-17 12:54:57

标签: swift swift2

XCode 6中的此代码没有错误,但在XCode 7(Swift 2)中发生了此错误:

  

Method不会覆盖其超类

中的任何方法
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
        /* Called when a touch begins */

}

删除override字时发生此错误:

  

方法'touchesBegan(:withEvent :)'与Objective-C选择器'touchesBegan:withEvent:'与来自超类'UIResponder'的方法'touchesBegan(:withEvent :)'冲突,具有相同的目标-C选择器

2 个答案:

答案 0 :(得分:77)

您收到第一个错误是因为Cocoa Touch的大部分都经过审核以支持Objective-C泛型,这意味着现在可以输入数组和集合等元素。因此,此方法的签名已更改,并且由于您所撰写的内容不再与此相符,因此您会错误地解释您已将方法标记为{{1}但它实际上并没有匹配超类中的任何方法。

然后,当您删除override关键字时,您遇到的错误会让您知道您已经制作了一个方法,该方法具有与实际触摸相关的具有冲突的Objective-C选择器的方法(与Swift不同,Objective-C不支持方法重载)。

底线是,在Swift 2中,你的触摸开始覆盖应该是这样的。

override

有关Objective-C泛型对Swift代码的意义的更多信息,建议您查看预发行版Using Swift with Cocoa and Objective-C中的轻量级泛型部分。截至目前的第33页&amp; 34。

答案 1 :(得分:2)

只需删除覆盖即可。

func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
        /* Called when a touch begins */

}