2010-03-11 87 views
12

有没有更好的方法来比较一个NSNumber与一个固定值,它只是觉得有点笨重。比较NSNumber与固定值?

if([myNumber isEqualToNumber:[NSNumber numberWithInt:0]]) NSLog(@"Zero"); 

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

加里

+2

一切都感觉有点麻烦了一会儿。 – MJeffryes 2010-03-11 19:55:44

+2

使用文字,它不是非常糟糕:'[NSNumber isEqualToNumber:@ 0]' – 2013-08-30 14:05:30

回答

49

如何if ([myNumber intValue] == 0)? (或者显然是<或>)。

+0

Doh :)完美,非常感谢本... – fuzzygoat 2010-03-11 20:02:03

+7

我会注意到,这只适用于如果数字已知是一个整数。值为0.4的NSNumber的intValue将为0. – 2011-07-21 20:10:53

5

NSNumber对象可以包含整数,浮点数,双打等 本的方法(相对于一个NSNumberintValue)是非常快速和容易阅读,但它只是正常工作,如果你能保证myNumber总是在int的范围(并且在将来的代码更改之后将始终如此)。

因此,如果您不知道myNumber的确切类型,那么您的方法实际上会更好。

// This will work regardless if myNumber is an int, double etc. 
[myNumber isEqualToNumber:[NSNumber numberWithInt:0]] 

如果与较大的固定数字或浮点数相比较,则无论如何您都必须使用此路线。 此外,最近的Xcode版本将适当警告你,如果你尝试创建一个NSNumber的与错误的类型,它可以帮助现场问题的早期:在的OBJ-C

Xcode 6.1.3 implicit conversion warning NSNumber

+1

错误的另一个细微来源是可能从“intValue”产生错误结果的子类“NSDecimalNumber”。 +1 – 2013-04-16 10:59:49