Я использую [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"];
objective-c
nsnumber
SUSE
источник
источник
[key intValue]
(ключNSNumber
)По возможности следует придерживаться
NSInteger
типов данных. Итак, вы бы создали такое число:Декодирование работает следующим
integerValue
образом:источник
NSInteger
?int
тоже примитивно, да. Однако его максимально допустимое число определено менее точно.NSInteger
по сути, это просто псевдоним некоторого примитивного целочисленного типа, который, как известно, является 32-битным на 32-битных машинах и 64-битным на 64-битных устройствах.int
, но в этом нет особого смысла, за исключением взаимодействия с кроссплатформенными библиотеками. И даже тогда что-то вродеuint32_t
бы лучше было бы использовать.Используйте метод NSNumber
intValue
Вот справочная документация Apple
источник
Менее подробный подход:
источник
Протестированный однострочник:
источник