比较NSNumber与固定值?

fuz*_*oat 13 cocoa objective-c

是否有更好的方法来比较NSNumber与固定值,它只是感觉有点笨重.

if([myNumber isEqualToNumber:[NSNumber numberWithInt:0]]) NSLog(@"Zero");
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用-compare但它几乎看起来一样......

加里

Ben*_*ieb 50

怎么样if ([myNumber intValue] == 0)?(或<或>,显然).

  • 我注意到这只有在已知数字为整数的情况下才有效.值为0.4的NSNumber的intValue将为0. (7认同)

And*_*Ley 5

NSNumber对象可以包含整数,浮点数,双精度等.本的方法(与NSNumbers相比intValue)非常快速且易于阅读,但只有当你能保证myNumber总是在一个范围内时才能正常工作int(并且总是如此,即使在未来的代码更改之后).

出于这个原因,如果你不知道确切的类型,你的方法实际上是优越的myNumber.

// This will work regardless if myNumber is an int, double etc.
[myNumber isEqualToNumber:[NSNumber numberWithInt:0]]
Run Code Online (Sandbox Code Playgroud)

如果与较大的固定数字或浮点数进行比较,您无论如何都必须走这条路线.此外,如果您尝试使用错误的类型创建NSNumber,Xcode的最新版本将正确警告您,这可以帮助及早发现问题:

Xcode 6.1.3隐式转换警告NSNumber