Swift 整数文字在存储到';Int';

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

Xcode正在抱怨以下行:

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