为什么我会收到错误" EXEC_BAD_INSTRUCTION"为此:
let r = Double(arc4random_uniform(181) - 90)
虽然这很好用:
let r = Double(arc4random_uniform(181)) - 90
在XCode 7.1中使用Swift。
答案 0 :(得分:0)
因为arc4random_uniform
的结果属于UInt32
类型,所以我不能成为负值。因此,只要arc4random_uniform
的结果小于90
,就会抛出错误。
转换为Double
后,该值可能会变为负数,因为该类型可以包含负值。这就是第二行代码的作用原因。
答案 1 :(得分:0)
这不是错误,它是Swift的一个特性。每当您创建算术溢出或下溢时,Swift都会故意崩溃。
每当arc4random_uniform(181)返回小于90的值并尝试从中减去90时,您将得到算术下溢。由于结果不在无符号32位整数范围内,因此Swift会通过崩溃程序通知您有关错误的信息。
并且这不是一个“双重”错误:你永远不会达到“双重”类型所涉及的那种程度。如果没有强制转换为Double,它会崩溃。