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
比较的结果是BOOL,它不是Objective-C对象.因此,你应该不使用打印%@.%d改为尝试(显示0或1).
[a compare:b]返回-1 if a < b,0 if a == b和1 if a > b.所以你的第二个结果是预期的.
您无法直接将NSNumber与整数进行比较.这i == 0实际上是一个指针比较,它检查是否i为NULL(0),如果该数字存在,当然是FALSE.所以第一个结果也是预期的.
如果要检查是否相等,请使用[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)
在这里,您将对象i的指针与0进行比较,我担心这不是您想要的.
你最想要比较i的值:
if ([i intValue]==0) {
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
35446 次 |
| 最近记录: |