使用boolValue方法检查条件

时间:2016-02-16 10:54:01

标签: objective-c

我有时会看到以下情况:

^(NSNumber *value) {
        if([value boolValue]){
...

如果我们已经知道值是数字,我们为什么要打扰这个方法呢?在Obj-C中,任何条件!= 0将评估为TRUE,当其== 0将评估为NO时。

3 个答案:

答案 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都是一样的。括号仅用于风格。