重写Swift 2中的函数错误

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

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

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

当删除重override发生此错误:

方法'touchesBegan( :withEvent :)'用Objective-Cselect器'touchesBegan:withEvent:'与具有相同Objective-Cselect器的超类'UIResponder' 的touchesBegan( :withEvent 🙂 方法冲突

你得到你的第一个错误,因为Cocoa Touch的大部分已经被审计,以支持Objective-C的generics,这意味着像数组和集合等元素现在可以input。 由于这个原因,这个方法的签名已经改变了,因为你写的东西不再符合这个,所以你会得到一个错误,说明你已经把一个方法标记为override但是它实际上并不匹配任何方法来自超级class。

然后,当你删除override关键字,你得到的错误是让你知道你已经做了一个方法有一个冲突的Objective-Cselect器与真正的触摸开始方法(不像Swift,Objective-C不支持方法重载)。

底线是,在Swift 2中,你的触动开始重写应该看起来像这样。

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

有关Objective-Cgenerics对您的Swift代码的意义的更多信息,我build议您查看使用Cocoa和Objective-C的Swift预发布版本中的轻量generics部分。 截至目前在第33和34页。

只要删除它将覆盖它将起作用。

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