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选择器
答案 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 */
}