gpt4 book ai didi

random - 将 arc4random() 的结果转换为 Int 时崩溃

转载 作者:IT王子 更新时间:2023-10-29 05:06:04 24 4
gpt4 key购买 nike

我写了一个简单的 Bag 类。一个袋子里装满了固定比例的温度枚举。它允许您随机抓取一个,并在空时自动重新装满。它看起来像这样:

class Bag {
var items = Temperature[]()

init () {
refill()
}

func grab()-> Temperature {
if items.isEmpty {
refill()
}

var i = Int(arc4random()) % items.count
return items.removeAtIndex(i)
}

func refill() {
items.append(.Normal)

items.append(.Hot)
items.append(.Hot)

items.append(.Cold)
items.append(.Cold)
}
}

Temperature 枚举如下所示:

enum Temperature: Int {
case Normal, Hot, Cold
}

我的 GameScene:SKScene有一个常量实例属性 bag:Bag . (我也尝试过使用变量。)当我需要一个新温度时,我调用 bag.grab() , 曾经在 didMoveToView并在适当的时候 touchesEnded .

此调用在 if items.isEmpty 上随机崩溃在线 Bag.grab() .错误是 EXC_BAD_INSTRUCTION .检查调试器显示项目是 size=1[0] = (AppName.Temperature) <invalid> (0x10) .

编辑 看来我不明白调试器信息。即使是有效数组也会显示 size=1[0] = 的不相关值.所以那里没有帮助。

我无法让它在 Playground 中单独崩溃。这可能是显而易见的事情,但我很困惑。

最佳答案

函数 arc4random 返回一个 UInt32。如果您获得的值高于 Int.max,则 Int(...) 转换将崩溃。

使用

Int(arc4random_uniform(UInt32(items.count)))

应该是更好的解决方案。

(怪 Alpha 版本奇怪的崩溃信息...)

关于random - 将 arc4random() 的结果转换为 Int 时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24087518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com