如何在 Swift 中从数组中提取随机项?
Posted
技术标签:
【中文标题】如何在 Swift 中从数组中提取随机项?【英文标题】:How to pull random item out of an array in Swift? 【发布时间】:2014-06-06 19:50:31 【问题描述】:我正在尝试从数组中拉出一个随机项。当我跑步时,它在拉一个随机项目和给我这个错误“EXC_BAD_INSTRUCTION”之间工作大约 50/50。知道发生了什么吗?
现在我的代码如下所示:BEFORE Solution
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
这是我现在正在使用的,似乎正在工作。感谢大家的帮助。
【问题讨论】:
您能否确定randomIndex
的哪些值有效,哪些返回EXC_BAD_INSTRUCTION
?
似乎是随机的。它有时有效,有时无效。
哪一行导致了错误?记录随机索引。
顺便说一句,arc4random_uniform(cardArray.count); 更好(没有偏见)和更容易使用;
这听起来像the same bug someone experienced a couple of days ago。你没有做错任何事——这是 Swift 中的一个错误,毕竟它仍处于测试阶段。
【参考方案1】:
arc4random
可以返回负数,这会给您带来麻烦,因为negative % positive = negative
更好的方法是使用arc4random_uniform
let randomIndex = arc4random_uniform(UInt32(cardArray.count))
EXC_BAD_INSTRUCTION 似乎是抛出边界错误的糟糕异常,但这似乎是你得到的。
【讨论】:
当我尝试使用 arc4random_uniform(cardArray.count) 时,我收到一条错误消息,提示无法将 NSNumber 发送到 UInt32。以上是关于如何在 Swift 中从数组中提取随机项?的主要内容,如果未能解决你的问题,请参考以下文章