Swift错误:类型下溢:Exec_Bad_Instruction

时间:2015-12-06 14:10:18

标签: swift

为什么我会收到错误" EXEC_BAD_INSTRUCTION"为此:

let r = Double(arc4random_uniform(181) - 90)

虽然这很好用:

let r = Double(arc4random_uniform(181)) - 90

在XCode 7.1中使用Swift。

2 个答案:

答案 0 :(得分:0)

因为arc4random_uniform的结果属于UInt32类型,所以我不能成为负值。因此,只要arc4random_uniform的结果小于90,就会抛出错误。

转换为Double后,该值可能会变为负数,因为该类型可以包含负值。这就是第二行代码的作用原因。

答案 1 :(得分:0)

这不是错误,它是Swift的一个特性。每当您创建算术溢出或下溢时,Swift都会故意崩溃。

每当arc4random_uniform(181)返回小于90的值并尝试从中减去90时,您将得到算术下溢。由于结果不在无符号32位整数范围内,因此Swift会通过崩溃程序通知您有关错误的信息。

并且这不是一个“双重”错误:你永远不会达到“双重”类型所涉及的那种程度。如果没有强制转换为Double,它会崩溃。