EXC_BAD_INSTRUCTION 仅在 iPhone 5 模拟器中
EXC_BAD_INSTRUCTION only in iPhone 5 simulator
运行 我在 iPhone 5 模拟器上的代码抛出了图中所示的异常。
运行 任何其他模拟器上的代码都很好。
在这行不起眼的代码中,我找不到哪里出错了。
还有其他人有这个问题吗?
NSInteger
(这是 Swift 中 Int
的类型别名)是 32 位
32 位平台上的整数,例如 iPhone 5。
结果
NSInteger(NSDate().timeIntervalSince1970) * 1000
是 1480106653342
(目前)并且不适合
范围 -2^31 ... 2^31-1
的 32 位(有符号)整数。
因此 Swift 中止执行。 (Swift 不 "truncate"
整数算术运算的结果,因为它是在一些
其他编程语言,除非您专门使用
"overflow" 运算符如 &*
.)
您可以在 所有 平台上使用 Int64
进行 64 位计算:
Int64(NSDate().timeIntervalSince1970 * 1000)
对于您的情况,如果需要字符串:
let lastLogin = String(Int64(NSDate().timeIntervalSince1970 * 1000))
运行 我在 iPhone 5 模拟器上的代码抛出了图中所示的异常。 运行 任何其他模拟器上的代码都很好。
在这行不起眼的代码中,我找不到哪里出错了。 还有其他人有这个问题吗?
NSInteger
(这是 Swift 中 Int
的类型别名)是 32 位
32 位平台上的整数,例如 iPhone 5。
结果
NSInteger(NSDate().timeIntervalSince1970) * 1000
是 1480106653342
(目前)并且不适合
范围 -2^31 ... 2^31-1
的 32 位(有符号)整数。
因此 Swift 中止执行。 (Swift 不 "truncate"
整数算术运算的结果,因为它是在一些
其他编程语言,除非您专门使用
"overflow" 运算符如 &*
.)
您可以在 所有 平台上使用 Int64
进行 64 位计算:
Int64(NSDate().timeIntervalSince1970 * 1000)
对于您的情况,如果需要字符串:
let lastLogin = String(Int64(NSDate().timeIntervalSince1970 * 1000))