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

den*_*tra 16 swift

Xcode抱怨以下行:

let primary = UInt32(0x8BC34AFF)
Run Code Online (Sandbox Code Playgroud)

有这个错误消息:

Integer literal '2344831743' overflows when stored into 'Int'
Run Code Online (Sandbox Code Playgroud)

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

vac*_*ama 27

UInt32(0x8BC34AFF)UInt32通过调用初始化程序创建一个.UInt32您调用的初始化程序是:

init(_ v: Int)
Run Code Online (Sandbox Code Playgroud)

问题是在32位设备(iPhone5和更早版本)上,类型Int是32位.所以,你传递的常量会0x8BC34AFF溢出Int你传递给初始化器的那个UInt32.

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

let primary = 0x8BC34AFF as UInt32
Run Code Online (Sandbox Code Playgroud)

或者,将变量声明为UInt32并且只分配常量:

let primary:UInt32 = 0x8BC34AFF
Run Code Online (Sandbox Code Playgroud)

  • 我必须做'1489064651000作为UInt64` (5认同)