在Object-C中将NSNumber转换为int


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"];

Answers:



61

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

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

integerValue然后使用以下方法解码:

NSInteger value = [number integerValue];

他为什么要坚持NSInteger
Iulian Onofrei 2014年

1
int也很原始,是的。但是,最大允许数量的定义不太精确。NSInteger本质上,它只是某些原始整数类型的别名,已知该原始整数类型在32位计算机上为32位,在64位设备上为64位。
Max Seelemann

1
是的,苹果公司建议这样做。
Max Seelemann

1
我建议不要对本机数字算术进行任何猜测。您可以肯定使用int,但是这样做没有什么意义,除了与跨平台的库接口之外。即使这样,uint32_t还是更好用的。
Max Seelemann

1
这样做肯定会使它与平台编码标准更加一致,是的。
Max Seelemann


1

不太冗长的方法:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.