存储到'Int'时整数文字溢出

时间:2016-02-11 01:54:57

标签: swift

Xcode抱怨以下一行:

let primary = UInt32(0x8BC34AFF)

出现此错误消息:

Integer literal '2344831743' overflows when stored into 'Int'

我看到它溢出了有符号整数,但我故意使用了UInt32。我的问题更多的是“这怎么可能”而不是“我该如何修复它”。

2 个答案:

答案 0 :(得分:24)

UInt32(0x8BC34AFF)通过调用初始化程序创建UInt32。您呼叫的UInt32初始值设定项为:

init(_ v: Int)

问题是在32位设备(iPhone5及更早版本)上,类型Int是32位。因此,您传递的常量0x8BC34AFF会溢出您传递给Int初始值设定项的UInt32

在32位和64位设备上运行此方法的方法是将整数文字转换为类型:

let primary = 0x8BC34AFF as UInt32

或者,将变量声明为UInt32并仅指定常量:

let primary:UInt32 = 0x8BC34AFF

答案 1 :(得分:0)

如果在尝试运行单元测试之前尚未选择任何设备或模拟器,则也可能会遇到此问题。 (在这种情况下,默认值为Generic iOS Device)。对于单元测试类中的某些整数值,我已经收到此错误。