Swift 3:覆盖BecomeFirstResponder时警告“未使用结果”(Swift 3 : Warning “Unused result of call” when overriding BecomeFirstResponder)

在一个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 ),但我希望覆盖与超级方法具有相同的行为。

我错在想这或者它可能是一个编译器错误?

编辑 : 仅供参考, 我为此提出了一个错误 。

In a UIView subclass, I'm override BecomeFirstResponder (which returns a Bool.

class MyViewSubclass:UIView { ... override func becomeFirstResponder() -> Bool { // some stuff return super.becomeFirstResponder() } ... }

When calling this method on a object of the subclass, I get a warning Result of call to 'becomeFirstResponder()' is Unused.

This message doesn't not happened when I don't override becomeFirstResponder.

I know that with Swift 3 the behaviour of methods returning results has evolved (see @discardableResult on SE-0047) but I would expect an override to have the same behaviour as its super method.

Am I wrong for thinking that or is it maybe a compiler bug ?

Edit: FYI, I filed a bug for this.

最满意答案

我不确定这是否是错误。 如果你已经覆盖了一个函数,那么现在完全有可能返回值不能被忽略。 如果这是你想要的,我会简单地添加@discardableResult :

@discardableResult override open func becomeFirstResponder() -> Bool { // some stuff return super.becomeFirstResponder() }

The bug has been solved in the lastest Swift version.

Swift 3:覆盖BecomeFirstResponder时警告“未使用结果”(Swift 3 : Warning “Unused result of call” when overriding BecomeFirstResponder)

在一个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 ),但我希望覆盖与超级方法具有相同的行为。

我错在想这或者它可能是一个编译器错误?

编辑 : 仅供参考, 我为此提出了一个错误 。

In a UIView subclass, I'm override BecomeFirstResponder (which returns a Bool.

class MyViewSubclass:UIView { ... override func becomeFirstResponder() -> Bool { // some stuff return super.becomeFirstResponder() } ... }

When calling this method on a object of the subclass, I get a warning Result of call to 'becomeFirstResponder()' is Unused.

This message doesn't not happened when I don't override becomeFirstResponder.

I know that with Swift 3 the behaviour of methods returning results has evolved (see @discardableResult on SE-0047) but I would expect an override to have the same behaviour as its super method.

Am I wrong for thinking that or is it maybe a compiler bug ?

Edit: FYI, I filed a bug for this.

最满意答案

我不确定这是否是错误。 如果你已经覆盖了一个函数,那么现在完全有可能返回值不能被忽略。 如果这是你想要的,我会简单地添加@discardableResult :

@discardableResult override open func becomeFirstResponder() -> Bool { // some stuff return super.becomeFirstResponder() }

The bug has been solved in the lastest Swift version.