这是否重写方法?

时间:2016-09-28 20:53:52

标签: ios swift3 xcode8

我最近被迫更新到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虽然它非常相似,但它是一个类,这是一个方法。为了安全起见,我尝试尝试使用该问题的解决方案,这进一步破坏了事情并引发了相同的错误。

2 个答案:

答案 0 :(得分:27)

canBecomeFirstResponder已从Swift 2.2中的方法更改为Swift 3.0中的属性。这意味着您必须更改代码以将其覆盖为属性而不是方法。

 override var canBecomeFirstResponder: Bool { return true }

答案 1 :(得分:3)

快速查找自己的教程:

  • 标记/选择/突出显示canBecomeFirstResponder
  • ⌘C
  • ⇧⌘0(零而不是O)以获取文档窗口。
  • ⌘V
  • (返回)

现在您将看到声明

var canBecomeFirstResponder: Bool { get }

你看到了区别吗?