忽略使用 "warn_unused_result" 属性声明的函数的 return 值

Ignoring return value of function declared with "warn_unused_result" attribute

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

Ignoring return value of function declared with "warn_unused_result" attribute

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

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


编辑:我也试过了,

BOOL ignore = [self.emailField becomeFirstResponder]; 

但是,Xcode 有关于未使用变量 ignore 的警告:(


我也试过了,

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

}

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

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

(void)[self.emailField becomeFirstResponder]; 

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

您的编辑:

BOOL ignore = [self.emailField becomeFirstResponder]; 

可能

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

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

顺便说一句:属性是有原因的。也许您应该重新检查一下,不测试 return 值是否是个好主意。

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

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

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

使用较少的魅力关联对象

  • 代码部分:
    #import "objc/runtime.h"
    #import <Foundation/Foundation.h>
    
    @interface NSObject(Helper)
    @property (nonatomic, assign) BOOL nonsense;
    @end
    
    @implementation NSObject(Helper)
    
    - (void)setNonsense:(BOOL)val{
        NSNumber *obj = [NSNumber numberWithBool: val];
        objc_setAssociatedObject(self, @selector(nonsense), obj, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
    }
    
    - (BOOL)nonsense{
        NSNumber *obj = objc_getAssociatedObject(self, @selector(nonsense));
        return obj.boolValue;
    }
    
    @end
  • 使用部分:
    self.nonsense = [self.sessionInputView endEditing:YES];