Swift 3:覆盖成为FirstResponder时警告“未使用的调用结果”
Posted
技术标签:
【中文标题】Swift 3:覆盖成为FirstResponder时警告“未使用的调用结果”【英文标题】:Swift 3 : Warning "Unused result of call" when overriding BecomeFirstResponder 【发布时间】:2016-07-28 13:50:25 【问题描述】:在UIView
子类中,我覆盖BecomeFirstResponder
(它返回Bool
。
class MyViewSubclass:UIView
...
override func becomeFirstResponder() -> Bool
// some stuff
return super.becomeFirstResponder()
...
在子类的对象上调用此方法时,我收到警告Result of call to 'becomeFirstResponder()' is Unused
。
当我不覆盖 becomeFirstResponder
时,不会出现此消息。
我知道在 Swift 3 中,返回结果的方法的行为已经发生了变化(请参阅 SE-0047 上的 @discardableResult
),但我希望重写具有与其超级方法相同的行为。
我的想法是错的还是编译器错误?
编辑: 仅供参考,I filed a bug 这个。
【问题讨论】:
对我来说似乎是一个错误。这当然可能是故意的,因为您的实现可能完全不同,但看起来很奇怪。 我有一些问题。是的,我认为这是一个错误 【参考方案1】:我不确定这是否是错误。如果您覆盖了一个函数,那么现在完全有可能无法忽略返回值。如果这是你想要的,我会简单地添加@discardableResult
:
@discardableResult override open func becomeFirstResponder() -> Bool
// some stuff
return super.becomeFirstResponder()
【讨论】:
【参考方案2】:这可能是正确的方法,即使我不是 swift 专家,但来自 Objective-C
class MyViewSubclass:UIView
...
override func becomeFirstResponder() -> Bool
// some stuff
super.becomeFirstResponder()
return true
...
【讨论】:
【参考方案3】:最新 Swift 版本中的错误 has been solved。
【讨论】:
以上是关于Swift 3:覆盖成为FirstResponder时警告“未使用的调用结果”的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Swift 3 在 UIView 中覆盖 requiresConstraintBasedLayout?
iOS Swift 3 - 面板点击后删除覆盖 UIView
Swift 3:通过覆盖 SKView 在 SpriteKit 中制作暂停菜单?