我必须处理一个很长的Int,这是作为String出现的。呼唤Int64(String)
在64位设备上可以正常工作,但是我看到32位设备上发生崩溃。这是什么原因呢?
这是代码:
let predicateBarcode = NSPredicate(format: "barcode = %ld", Int64(searchTerm)!)
我无法告诉您有关搜索词的任何信息,它来自条形码扫描仪,并且是ean-13。我也无法重现崩溃,因为这仅发生在我的客户身上。
最佳答案
这不是Int64.init(_:)
的问题,而是NSPredicate
提供的格式的问题。
长度说明符l
表示其参数需要为long
或unsigned long
,与Swift中的Int
或UInt
等效。
String Format Specifiers
如果要使用Int64
值作为格式参数,则正确的长度说明符为ll
,这意味着long long
等效于Swift中的Int64
。
let predicateBarcode = NSPredicate(format: "barcode = %lld", Int64(searchTerm)!)
您可能需要修复一些其他零件,但由于隐藏了其他零件,因此我看不到。 (据我测试,我无法使我的测试应用程序崩溃。)此外,您是否100%确信
Int64(searchTerm)!
不会崩溃?无论如何,格式字符串至少需要固定。
关于ios - 将String强制转换为Int64会导致32位设备崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45539424/