【发布时间】:2015-12-25 00:09:43
【问题描述】:
在我最近的一个 swift 程序中,我遇到了这个奇怪的错误。它涉及随机事件,为了模拟这一点,我分配了一个事件“赔率”,然后生成两个随机数(使用这些赔率),如果数字相同,则动作发生。但是程序在生成部分莫名其妙地崩溃了。我能想到的唯一解释是需要过多的投射,但我不确定为什么它只会偶尔崩溃一次。我很感激任何关于为什么铸造崩溃的见解以及任何关于如何避免这种过度铸造的建议。
我的图片显示了代码和错误,下面的代码是我的代码的概括。
Crash Error
let rand = [Int(arc4random_uniform(UInt32(someInt))), Int(arc4random_uniform(UInt32(someInt)))]
if (rand[0] == rand[1]) {
executeAction()
}
【问题讨论】:
-
为了澄清,arc4random_uniform 采用 UInt32 并返回 UInt32。我的 someInt 是个位整数。
-
这对我来说没有崩溃, someInt 包含什么?
-
显然是呈指数增长的数字。在某些情况下,我将赔率翻了一番(从 3 到 6)……但由于赔率是全球性的,所以他们保留了增加并继续翻倍。我猜 UInt32 已用尽并抛出错误。不过感谢您的帮助!