Преобразование NSNumber в int в Objective-C


122

Я использую [NSNumber numberWithInt:42]или @(42)для преобразования int в NSNumber перед добавлением его в NSDictionary:

int intValue = 42;
NSNumber *numberValue = [NSNumber numberWithInt:intValue];
NSDictionary *dict = @{ @"integer" : numberValue };

Когда я получаю значение из NSDictionary, как я могу преобразовать его из NSNumber обратно в int?

NSNumber *number = dict[@"integer"];
int *intNumber = // ...?

Он выдает исключение, в котором говорится, что требуется приведение, когда я делаю это следующим образом:

int number = (int)dict[@"integer"];

Ответы:



61

По возможности следует придерживаться NSIntegerтипов данных. Итак, вы бы создали такое число:

NSInteger myValue = 1;
NSNumber *number = [NSNumber numberWithInteger: myValue];

Декодирование работает следующим integerValueобразом:

NSInteger value = [number integerValue];

Почему он должен придерживаться NSInteger?
Юлиан Онофрей

1
intтоже примитивно, да. Однако его максимально допустимое число определено менее точно. NSIntegerпо сути, это просто псевдоним некоторого примитивного целочисленного типа, который, как известно, является 32-битным на 32-битных машинах и 64-битным на 64-битных устройствах.
Макс Зелеманн, 06

1
Да, Apple предлагает.
Макс Зелеманн,

1
Я бы рекомендовал ничего не делать предположений о собственной числовой арифметике. Вы можете использовать его int, но в этом нет особого смысла, за исключением взаимодействия с кроссплатформенными библиотеками. И даже тогда что-то вроде uint32_tбы лучше было бы использовать.
Макс Зелеманн,

1
Да, это, безусловно, сделает его более совместимым со стандартами кодирования платформы.
Макс Зелеманн,



Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.