Перетворити 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-бітних пристроях.
Макс Зелелман

1
Так, Apple пропонує.
Макс Зелеманн

1
Я б рекомендував нічого не вгадувати про арифметику натурних чисел. Можна впевнено використовувати int, але в цьому мало сенсу, за винятком взаємодії з платформами між платформами. І навіть тоді щось подібне uint32_tбуло б краще використовувати.
Макс Зелеманн

1
Це, безумовно, зробить його більш відповідним стандартам кодування на платформі, так.
Макс Зелеман



Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.