忽略使用 "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];
我们开始对 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];