Używam [NSNumber numberWithInt:42]
lub @(42)
do konwersji int na NSNumber przed dodaniem go do NSDictionary:
int intValue = 42;
NSNumber *numberValue = [NSNumber numberWithInt:intValue];
NSDictionary *dict = @{ @"integer" : numberValue };
Kiedy pobieram wartość z NSDictionary, jak mogę przekształcić ją z NSNumber z powrotem do int?
NSNumber *number = dict[@"integer"];
int *intNumber = // ...?
Zgłasza wyjątek mówiący, że rzutowanie jest wymagane, gdy robię to w ten sposób:
int number = (int)dict[@"integer"];
objective-c
nsnumber
suse
źródło
źródło
[key intValue]
(klucz toNSNumber
)W miarę możliwości należy trzymać się
NSInteger
typów danych. Więc utworzyłbyś taki numer:Dekodowanie działa z
integerValue
metodą:źródło
NSInteger
?int
jest też prymitywny, tak. Jednak maksymalna dozwolona liczba jest mniej precyzyjnie określona.NSInteger
jest po prostu aliasem do jakiegoś prymitywnego typu liczby całkowitej, o którym wiadomo, że jest 32-bitowy na komputerach 32-bitowych i 64-bitowy na urządzeniach 64-bitowych.int
, ale nie ma to większego sensu, z wyjątkiem interfejsu z bibliotekami wieloplatformowymi. I nawet wtedy coś takiegouint32_t
byłoby lepsze w użyciu.Użyj metody NSNumber
intValue
Oto dokumentacja referencyjna Apple
źródło
Mniej rozwlekłe podejście:
źródło
Przetestowany one-liner:
źródło