忽略使用“warn_unused_result”属性声明的函数的返回值

时间:2017-04-05 17:59:44

标签: objective-c xcode8

我们在Objective-C代码中的所有becomeFirstResponder函数调用上开始发出此警告。

  

忽略使用“warn_unused_result”属性声明的函数的返回值

[self.phoneNumberField becomeFirstResponder]; // warning here!!!

在这里抑制此警告的最佳方法是什么?

编辑:我也试过了,

BOOL ignore = [self.emailField becomeFirstResponder]; 

但有了这个,Xcode警告变量ignore未被使用:(

我也尝试了这个,

BOOL ignore = [self.phoneNumberField becomeFirstResponder];
if (ignore) {

}

在这种情况下,警告消失了。但我认为我甚至无法通过自己的代码审查。太难看了!

2 个答案:

答案 0 :(得分:32)

它应该可以将表达式转换为void表达式。

(void)[self.emailField becomeFirstResponder]; 

(即使我无法重现警告。但是,这可能取决于警告标志。)

进行编辑:

BOOL ignore = [self.emailField becomeFirstResponder]; 

可能的

BOOL ignore = [self.emailField becomeFirstResponder]; 
ignore = ignore;
// or
(void)ignore;

应删除警告。 (这与我的旗帜有关。)然而,这也是一个丑陋的黑客。

BTW:该属性有一个原因。也许你应该重新检查一下是否是一个好主意,而不是测试返回值。

答案 1 :(得分:3)

如果您具有从Objective-C代码调用的Swift函数,则可能会收到此警告。您可以通过在Swift中的函数之前添加@discardableResult来使其静音,如下所示:

@objc @discardableResult func yourFanzyFuncInSwift(argument: String) -> Bool { ... }

类似于 warn_unused_result 是Swift中的默认设置,这意味着您不应编写忽略返回值的代码。