J'utilise [NSNumber numberWithInt:42]
ou @(42)
pour convertir un int en NSNumber avant de l'ajouter à un NSDictionary:
int intValue = 42;
NSNumber *numberValue = [NSNumber numberWithInt:intValue];
NSDictionary *dict = @{ @"integer" : numberValue };
Lorsque je récupère la valeur du NSDictionary, comment puis-je la transformer de NSNumber en int?
NSNumber *number = dict[@"integer"];
int *intNumber = // ...?
Il lève une exception indiquant que le casting est requis lorsque je le fais de cette façon:
int number = (int)dict[@"integer"];
objective-c
nsnumber
suse
la source
la source
[key intValue]
(la clé estNSNumber
)Vous devez vous en tenir aux
NSInteger
types de données lorsque cela est possible. Donc, vous créez le numéro comme ça:Le décodage fonctionne avec la
integerValue
méthode alors:la source
NSInteger
?int
est primitif aussi, oui. Cependant, son nombre maximum autorisé est défini avec moins de précision.NSInteger
est essentiellement juste un alias d'un type entier primitif connu pour être 32 bits sur les machines 32 bits et 64 bits sur les périphériques 64 bits.int
, mais cela ne sert à rien, sauf pour l'interfaçage avec des bibliothèques multiplateformes. Et même dans ce cas, iluint32_t
serait préférable d'utiliser quelque chose comme .Utilisez la méthode NSNumber
intValue
Voici la documentation de référence Apple
la source
Une approche moins verbeuse:
la source
Un one-liner testé:
la source