Ios 如何在Swift中从数组中提取随机项?

Ios 如何在Swift中从数组中提取随机项?,ios,swift,exc-bad-instruction,Ios,Swift,Exc Bad Instruction,我试图从数组中随机抽取一个项目。当我运行时,它在拉一个随机项和给我这个错误“EXC_BAD_指令”之间工作大约50/50。知道发生了什么吗 现在,我的代码如下所示:在解决方案之前 func randomCard() -> Card { let randomIndex = Int(arc4random()) % cardArray.count let randomCard = cardArray[randomIndex] cardArray.removeAtI

我试图从数组中随机抽取一个项目。当我运行时,它在拉一个随机项和给我这个错误“EXC_BAD_指令”之间工作大约50/50。知道发生了什么吗

现在,我的代码如下所示:在解决方案之前

   func randomCard() -> Card {
    let randomIndex = Int(arc4random()) % cardArray.count
    let randomCard = cardArray[randomIndex]

    cardArray.removeAtIndex(randomIndex)

    return randomCard
}
之后

   func randomCard() -> Card {

    let randomIndex = arc4random_uniform(UInt32(cardArray.count))
    let randomCard = cardArray[randomIndex.hashValue]

    cardArray.removeAtIndex(randomIndex.hashValue)

    return randomCard
}

这是我现在正在使用的,看起来很有效。谢谢大家的帮助

arc4random
可能返回负数,这会给您带来问题,因为
negative%positive=negative
更好的方法是使用
arc4random\u uniform

let randomIndex = arc4random_uniform(UInt32(cardArray.count))

EXC_BAD_指令似乎是一个引发边界错误的坏异常,但这似乎就是您得到的。

您是否能够确定
随机索引的哪些值有效,以及哪些值返回
EXC_BAD_指令
?似乎是随机的。它有时工作,有时不工作。哪一行导致了错误?Log randomIndex.BTW,它更好(无偏差)并且更容易使用arc4random_uniform(cardArray.count);这听起来像。你没有做错任何事-这是Swift中的一个bug,毕竟它仍处于测试阶段。当我尝试使用arc4random_uniform(cardArray.count)时,我收到一个错误,说NSNumber无法发送到UInt32。