Подтвердить что ты не робот

Сравнить NSNumber с фиксированным значением?

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

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

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

Гэри

4b9b3361

Ответ 1

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

Ответ 2

NSNumber объекты могут содержать int, float, double и т.д. Бен (по сравнению с 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