Swift 整数文字在存储到';Int';
Xcode正在抱怨以下行:Swift 整数文字在存储到';Int';,swift,Swift,Xcode正在抱怨以下行: let primary = UInt32(0x8BC34AFF) 出现此错误消息时: Integer literal '2344831743' overflows when stored into 'Int' 我看到它溢出了一个有符号整数,但我故意使用UInt32。我的问题更多的是“这是怎么回事”,而不是“我如何修复它”。UInt32(0x8BC34AFF)通过调用初始值设定项创建一个UInt32。您正在调用的UInt32初始值设定项是: init(_ v: In
let primary = UInt32(0x8BC34AFF)
出现此错误消息时:
Integer literal '2344831743' overflows when stored into 'Int'
我看到它溢出了一个有符号整数,但我故意使用UInt32。我的问题更多的是“这是怎么回事”,而不是“我如何修复它”。UInt32(0x8BC34AFF)
通过调用初始值设定项创建一个UInt32
。您正在调用的UInt32
初始值设定项是:
init(_ v: Int)
问题在于,在32位设备(iPhone5及更早版本)上,键入Int
是32位的。因此,传递给0x8BC34AFF
的常量溢出传递给UInt32
的初始值设定项的Int
在32位和64位设备上执行此操作的方法是将整数文本强制转换为以下类型:
let primary = 0x8BC34AFF as UInt32
或者,将变量声明为UInt32
,然后只分配常量:
let primary:UInt32 = 0x8BC34AFF
如果在尝试运行单元测试之前未选择任何设备或模拟器,也可能会遇到此问题。(在这种情况下,选择默认的
通用iOS设备)。我在单元测试类中收到了一些整数值的错误。此错误可能非常隐蔽-它可能依赖于目标平台,因此您的程序可以在iPhone 6上正常编译和运行,然后当您将模拟器切换到iPhone 5时,会弹出此错误并阻止编译!幸运的是,下面的答案解决了这个问题,并解释了32位与64位的背景。谢谢。我的代码构建并运行良好,直到刚才,由于某种原因,它突然变得不好。我没有更改设备或任何东西,尽管这可能是我第一次尝试使用Xcode 9构建此设备。我必须按照UInt64执行1489064651000