XCode 6中的此代码没有错误,但是在XCode 7(Swift 2)中发生了此错误:
方法不会覆盖其超类中的任何方法
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) { /* Called when a touch begins */ }
删除override单词时,发生此错误:
override
方法’的touchesBegan( ::) withEvent’与目标C选择’的touchesBegan:withEvent:方法’与方法冲突’的touchesBegan( :从超类的UIResponder’具有相同的目标C选择withEvent :)’
您遇到了第一个错误,因为许多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页。