在Objective-C中将NSNumber转换为int

133

在将整型添加到NSDictionary之前,我使用[NSNumber numberWithInt:42]@(42)将其转换为NSNumber:

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"];
5个回答

208

请查看文档。使用intValue方法:

NSNumber *number = [dict objectForKey:@"integer"];
int intValue = [number intValue];

现在使用ARC已经禁止了隐式转换。 - Alexander
基本上 [key intValue] (其中 key 是 NSNumber 类型) - user924

62

尽可能使用NSInteger数据类型。因此,您可以像这样创建数字:

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

通过使用 integerValue 方法进行解码,然后:

NSInteger value = [number integerValue];

1
int 也是一种原始类型,但是它的最大允许值定义得不够精确。NSInteger 实际上只是某些基本整数类型的别名,在32位机器上为32位,在64位设备上为64位。 - Max Seelemann
在大多数情况下,使用NSInteger比使用int更好的想法吗? - Iulian Onofrei
1
是的,苹果建议这样做。 - Max Seelemann
1
我建议不要对原生数字运算进行猜测。你可以使用int,但这样做没有什么意义,除非与跨平台库进行交互。即使如此,使用类似于uint32_t的东西会更好。 - Max Seelemann
1
这样做肯定会使其更符合平台编码标准,是的。 - Max Seelemann
显示剩余6条评论

4

1
一种更简洁的方法:

int number = [dict[@"integer"] intValue];

1
一句经过测试的代码:

int number = ((NSNumber*)[dict objectForKey:@"integer"]).intValue;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接