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 中制作暂停菜单?

“方法不会覆盖其超类中的任何方法”Swift 3 [重复]

在 Swift 3 中覆盖 UIViewController 初始化

方法不会覆盖其超类 swift 3.0 错误中的任何方法 [重复]