我有一个来自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
答案 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]