一尘不染

在Swift 2中重写func错误

swift

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

方法不会覆盖其超类中的任何方法

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

}

删除override单词时,发生此错误:

方法’的touchesBegan( ::)
withEvent’与目标C选择’的touchesBegan:withEvent:方法’与方法冲突’的touchesBegan(

:从超类的UIResponder’具有相同的目标C选择withEvent :)’


阅读 185

收藏
2020-07-07

共1个答案

一尘不染

您遇到了第一个错误,因为许多Cocoa Touch已通过审核以支持Objective-
C泛型,这意味着可以键入数组和集合之类的元素。因此,此方法的签名已更改,并且由于您编写的内容不再与之匹配,因此会出现错误,说明您已将方法标记为,override但实际上与以下任何方法都不匹配超级班。

然后,当您删除override关键字时,您得到的错误是让您知道您使用真正的touched begin方法制作了一个与Objective-
C选择器冲突的方法(与Swift不同,Objective-C不支持method超载)。

最重要的是,在Swift 2中,您的触摸开始覆盖应该看起来像这样。

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    // stuff
}

有关Objective-
C泛型对您的Swift代码意味着什么的更多信息,建议您查看使用Swift和Cocoa和Objective-C的预发行版中的“轻量级泛型”部分。截至第33和34页。

2020-07-07