我想将一些 NSNumber 作为 double 存储在 NSArray 中。所以我试过了:
NSArray *diamArray = [[NSArray alloc] initWithObjects:
[NSNumber numberWithDouble:1.0],
[NSNumber numberWithDouble:1.2],
nil];
然后,我要求 Xcode 显示 diamArray:
NSLog(@"%@", diamArray);
结果如下:
[8873:1153347] (
1,
"1.2"
)
所以我们可以看到两个数字的处理方式不同。这对我来说是个问题,因为这些值在类型更改时可用。特别是,在数组的调试表中,我可以看到十进制数 (1.2) 为“double”,但 1.0 值显示为“null”。
如何强制数组将 1.0 视为 double ?
最佳答案
从 NSLog 中解读数据类型可能会造成混淆,因为它试图显示方便的信息。在本例中,1.0 恰好是 1,因此它会截断该值,使其看起来像是一个 Int。我几乎可以保证,如果您将项目从数组中拉出并显示它是 objCType,您会发现它是一个 double :
NSLog("%@: %s", diamArray[0], [diamArray[0] objCType]);
要考虑的另一件事是值可以从 NSNumber 中转换出来,所以即使它存储 1.0 作为整数值,你仍然可以将它提取为 double 值:
[diamArray[0] doubleValue]
关于ios - NSArray 改变 NSNumber 的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30955015/