将NSNumber与int进行比较

pat*_*ick 17 compare objective-c nsnumber

我有一个简单的问题(我认为):我正在尝试将NSNumber与int进行比较,看看它是0还是1.这是代码:

id i = [dictionary objectForKey:@"error"]; //class = NSCFNumber

NSLog(@"%@ == 0 -> %@", i, i == 0);
NSLog(@"%@ == 0 -> %@", i, [i compare:[NSNumber numberWithBool:NO]]);
Run Code Online (Sandbox Code Playgroud)

我试过这个方法,但结果是null:

2010-10-17 21:57:49.065 Api[15152:a0f] 0 == 0 -> (null)
2010-10-17 21:57:49.065 Api[15152:a0f] 0 == 0 -> (null)
Run Code Online (Sandbox Code Playgroud)

你能帮助我吗?

ken*_*ytm 46

  1. 比较的结果是BOOL,它不是Objective-C对象.因此,你应该使用打印%@.%d改为尝试(显示0或1).

  2. [a compare:b]返回-1 if a < b,0 if a == b和1 if a > b.所以你的第二个结果是预期的.

  3. 您无法直接将NSNumber与整数进行比较.这i == 0实际上是一个指针比较,它检查是否i为NULL(0),如果该数字存在,当然是FALSE.所以第一个结果也是预期的.

  4. 如果要检查是否相等,请使用[a isEqualToNumber:b].或者,您可以直接提取整数[a intValue]并与另一个整数进行比较.

所以以下应该有效:

NSLog(@"%@ == 0 -> %d", i, [i isEqualToNumber:[NSNumber numberWithInt:0]]);
NSLog(@"%@ == 0 -> %d", i, [i intValue] == 0);
Run Code Online (Sandbox Code Playgroud)

如果"数字"实际上是一个布尔值,那么最好采取-boolValue相反的方法.

NSLog(@"%@ == 0 -> %d", i, ! [i boolValue]);
Run Code Online (Sandbox Code Playgroud)


Vic*_*cas 9

在这里,您将对象i的指针与0进行比较,我担心这不是您想要的.

你最想要比较i的值:

if ([i intValue]==0) {
  ...
}
Run Code Online (Sandbox Code Playgroud)