2010-03-11 5 views
12

Gibt es einen besseren Weg, um eine NSNumber mit einem festen Wert zu vergleichen, es fühlt sich nur ein wenig klobig an.Vergleichen Sie eine NSNumber mit einem festen Wert?

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

Ich weiß, dass ich -compare verwenden, aber es sieht so ziemlich das gleiche ...

gary

+2

Alles in Obj-C fühlt sich ein wenig klobig für eine Weile . – MJeffryes

+2

Mit Literalen ist es nicht ganz so schlimm: '[NSNumber isEqualToNumber: @ 0]' –

Antwort

49

Wie wäre es if ([myNumber intValue] == 0)? (oder < oder>, offensichtlich).

+0

Doh :) perfekt, vielen Dank Ben ... – fuzzygoat

+7

Ich würde bemerken, dass dies nur funktioniert, wenn die Zahl bekanntermaßen eine ganze Zahl ist. Der intValue einer NSNumber mit dem Wert 0.4 ist 0. –

5

NSNumber Objekte können Ints, Schwimmer, verdoppelt usw. Bens Ansatz (im Vergleich zu einem NSNumber ‚s intValue) ist sehr schnell und leicht zu lesen, aber es funktioniert nur richtig enthalten, wenn Sie, dass myNumber ist immer in der garantieren kann, Bereich einer int (und wird immer, auch nach zukünftigen Code-Änderungen).

Aus diesem Grund ist Ihr Ansatz tatsächlich überlegen, wenn Sie nicht den genauen Typ von myNumber kennen.

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

größere feste Zahlen oder Schwimmer Wenn vergleichen, werden Sie auf jeden Fall diesen Weg zu gehen haben. Auch neuere Versionen von Xcode warnt Sie richtig, wenn Sie einen NSNumber mit der falschen Art zu schaffen versuchen, die vor Ort Probleme frühzeitig helfen können:

Xcode 6.1.3 implicit conversion warning NSNumber

+1

Eine andere subtile Fehlerquelle wäre die Unterklasse 'NSDecimalNumber', die falsche Ergebnisse von' intValue' liefern kann. +1 –

Verwandte Themen