整数文字'115000159351'在存储到'Int'中时溢出,但在一个项目中可以正常工作,但在另一个项目中却不行-Swift

时间:2018-08-12 06:24:43

标签: ios swift

我有一个来自zendesk的iOS图书馆,我使用它们给我的数字按类别对帮助台项目进行排序。这是我告诉我想要的类别的方法:

        hcConfig.groupIds = [115000159351]

但是,XCODE抛出

错误
Integer literal '115000159351' overflows when stored into 'Int'

好的,我了解。可能是因为该数字大于32位。但是我制作了另一个应用程序,使我拥有一个同样长的数字,并且该应用程序构建良好,没有错误。相同的代码,只是数字略有不同。

    hcConfig.groupIds = [115000158052]

为什么要建立一个项目,而不能建立另一个项目?

以下是他们的说明供参考: https://developer.zendesk.com/embeddables/docs/ios_support_sdk/help_center#filter-articles-by-category

2 个答案:

答案 0 :(得分:1)

当两个整数都转换为二进制时,它们需要大约〜37的相等位

1101011000110100010110010110001110111 = 115000159351
1101011000110100010110010011101100100 = 115000158052

因此,似乎正在运行的一个被编译为64位应用程序,而其中一个失败的被编译为32位应用程序。 请验证一次。

请参考How to convert xcode 32 bit app into 64 bit xcode app将您的应用程序从32位转换为64位

要在NSNumber中使用大数,请使用以下方法:

NSNumber *value = [NSNumber numberWithLongLong:115000159351];

此外,以下代码对我来说也可以在32位上正常运行:

var groupIds = [NSNumber]();
groupIds = [115000158052, 115000158053, 115000158054]
groupIds = [115000158052 as NSNumber, 115000158053  as NSNumber, 115000158054 as NSNumber]
groupIds = [115000158052 as Int64 as NSNumber, 115000158053  as Int64 as NSNumber, 115000158054 as Int64 as NSNumber]

我认为groupId不是NSNumber,而是Int。

答案 1 :(得分:1)

Swift Int是32位或64位整数,具体取决于平台。 要在所有平台上从64位文字创建NSNumber(数组),请使用

let groupIds = [NSNumber(value: 115000159351 as Int64)]

let groupIds = [115000159351 as Int64 as NSNumber]