сравнить NSNumber с фиксированным значением? - PullRequest
13 голосов
/ 11 марта 2010

Есть ли лучший способ сравнить NSNumber с фиксированным значением, это просто немного неуклюже.

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

Я знаю, что могу использовать -сравнить, но это выглядит примерно так же ...

* 1006 Гэри *

Ответы [ 2 ]

50 голосов
/ 11 марта 2010

Как насчет if ([myNumber intValue] == 0)? (или <или>, очевидно).

5 голосов
/ 16 апреля 2013

NSNumber объекты могут содержать целые числа, числа с плавающей запятой, двойные числа и т. Д. Подход Бена (по сравнению с NSNumber intValue) очень быстр и прост для чтения, но он работает правильно, только если вы можете гарантировать, что myNumber всегда находится в диапазоне int (и всегда будет быть, даже после будущих изменений кода).

По этой причине ваш подход на самом деле лучше, если вы не знаете точный тип myNumber.

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

Если сравнивать с большими фиксированными числами или числами с плавающей запятой, вам все равно придется идти по этому пути. Кроме того, последние версии XCode будут правильно предупреждать вас, если вы попытаетесь создать NSNumber с неправильным типом, который может помочь обнаружить проблемы на раннем этапе:

Xcode 6.1.3 implicit conversion warning NSNumber

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...