我最近被迫更新到Swift 3.0,看起来Xcode的转换并没有做得很好。幸运的是,我能够手动解决大部分问题,但是,让我有点困惑。
在升级到Swift 3.0之前,这行覆盖了uiController中的canBecomeFirstResponder
方法:
override func canBecomeFirstResponder() -> Bool {
return true
}
但是,它现在返回错误:
Method不会覆盖其超类中的任何方法。
但是,删除override
位似乎无法修复它,因为它会引发一个似乎与前一个相矛盾的不同错误:
方法' canBecomeFirstResponder()'使用Objective-C选择器&can;成为第一个响应者'与吸气器的冲突为'canBecomeFirstResponder'来自超类' UIResponder'使用相同的Objective-C选择器
是否实际发生了覆盖?为什么Xcode会在这里给我发送混合信息?
作为参考,我看过this question虽然它非常相似,但它是一个类,这是一个方法。为了安全起见,我尝试尝试使用该问题的解决方案,这进一步破坏了事情并引发了相同的错误。
答案 0 :(得分:27)
canBecomeFirstResponder
已从Swift 2.2中的方法更改为Swift 3.0中的属性。这意味着您必须更改代码以将其覆盖为属性而不是方法。
override var canBecomeFirstResponder: Bool { return true }
答案 1 :(得分:3)
快速查找自己的教程:
canBecomeFirstResponder
现在您将看到声明
var canBecomeFirstResponder: Bool { get }
你看到了区别吗?