我有时会看到以下情况:
^(NSNumber *value) {
if([value boolValue]){
...
如果我们已经知道值是数字,我们为什么要打扰这个方法呢?在Obj-C中,任何条件!= 0将评估为TRUE,当其== 0将评估为NO时。
答案 0 :(得分:1)
因为NSNumber
是一个包含数字(或布尔值)的对象。任何对象都可以是nil
(未初始化),并且与保持整数0
或布尔NO
的对象不同。
因此:
NSNumber *a = @(NO);
NSNumber *b = nil;
if (a != b) {
// Always true
}
答案 1 :(得分:1)
NSNumber是原始值的包装器。所以,如果你像这样包装一个布尔:
NSNumber *b = @(YES);
您将在其中获得值为YES
(或TRUE)的对象。但是你可以对NO
做同样的事情。因此,无论您是YES
还是NO
,对象都将始终返回非零对象。这就是使用NSNumber
方法打开boolValue
值的原因。
答案 2 :(得分:1)
当您知道NSNumber
对象中的值时,应将其转换为特定类型以获取值。
例如
NSNumber *a = [NSNumber numberWithBool:YES];
您知道您的号码对象(a)中有布尔值。
所以你可以这样查看,
if([a boolValue]) {
//This means TRUE or true or YES or 1
} else {
//This means FALSE or false or NO or 0
}
现在考虑一下这个案例,
NSNumber *b = [NSNumber numberWithInteger:5];
在这个数字中,你的数字对象(b)中有一个整数。
要获得它的价值,你可以这样做:
NSInteger value = [b integerValue];
还有其他一些编写数字对象的方法
例如
NSNumber *c = @YES; //@NO;
NSNumber *d = @(YES); //@(NO);
这里,c和d都是一样的。括号仅用于风格。