ios - NSArray 改变 NSNumber 的类型

标签 ios objective-c

我想将一些 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/

相关文章:

ios - Firebase 存储完成从未触发/被回调

ios - 如何使用Objective-C从纯文本远程文件中读取内容

ios - 将数组写入 .plist 文件 Swift

iphone - 没有互联网连接时 dismissModalViewController 不工作 MPMoviePlayerViewController

iphone - 如何在不插入空格的情况下替换 NSString 中的字符?

ios - 外部驱动器断电,派生数据文件夹被删除;现在 Xcode 项目构建失败

iphone - 使用 addOperationWithBlock 将 block 添加到队列并使用完成 block

ios - 从部署目标 iOS 中删除特定设备

ios - 当应用程序在后台运行时(即按下主页按钮时)停止音乐

ios - 我是否需要实现导航 Controller 才能添加其他 Controller 的 View ?