2012-03-14 3 views
36

Быстрый вопрос: возможно ли передать NSInteger в объект NSNumber? Мне нужно преобразовать тег объекта UIImageView в объект NSNumber, потому что мне нужно передать его как аргумент функции.Можно ли указать NSInteger для NSNumber?

+0

Это абсолютно возможно бросить NSInteger к NSNumber *. Результат, скорее всего, приведет к краху. Конечно, если у вас есть число x, вы можете использовать @ (x) для создания объекта NSNumber со значением x. Что будет работать, но это не актерский состав. – gnasher729

ответ

99

Вы не можете листинг это потому, что NSInteger не является объектом, просто псевдонимом для встроенного типа. Вы всегда можете создать новый объект NSNumber из NSInteger, как это:

NSNumber *myNum = @(myNsIntValue); 

или в предыдущей версии компилятора, используйте

NSNumber *myNum = [NSNumber numberWithInteger:myNsIntValue]; 
+1

Этот ответ выводит предупреждение о новых 64-разрядных устройствах. Пожалуйста, см. Более точный ответ @ Кевина ниже. –

+0

@FullDecent Отредактировано, спасибо! – dasblinkenlight

6

Это более правильный ответ, и он не будет производить неожиданные ошибка.

NSNumber *myNum = [NSNumber numberWithInteger:myNsIntValue]; 

Так как док сказал:

"numberWithInteger:. Создает и возвращает объект NSNumber, содержащий заданное значение, рассматривая его как NSInteger"

"numberWithInt: Создает и возвращает объект NSNumber, содержащий заданное значение, рассматривая его как подписанный int."

15

так Apple LLVM Compiler 4.0, есть более простой способ создания NSNumber объекта:

NSNumber *x = @1234; 
NSNumber *y = @(anIntegerVariable); 
+1

NSNumber * z = @ (aDoubleValue); работает так же хорошо. – gnasher729