我的卡片由 52 张卡片组成,因此我为它们创建了一个数组
,当用户单击屏幕时,就会显示一张卡片。
我希望当一张卡被拉取后,以后就不能再被拉取了。我使用 removeAtIndex
从 array
中删除拉出的卡片。当用户触摸屏幕任意位置时,将调用函数 pullCard
:
// Cards
let card1 = (1, "AS", "RULE 1")
let card2 = (2, "2", "RULE 2")
let card3 = (3, "3", "RULE 3")
let card4 = (4, "4", "RULE 4")
let card5... (to 52)
// Array
var cards = [
card1,
card2,
card3,
card4,
card5... (to 52)
]
func pullCard() {
let randomCard = Int(arc4random_uniform(UInt32(cards.count)))
let cardsIndex = randomCard - 1
let card = cards[cardsIndex]
cards.removeAtIndex(cardsIndex)
}
根据示例,游戏拉取卡牌 32,因此会将其从数组中删除,之后如果游戏拉取同一张卡牌,则会因卡牌被删除而崩溃。
我尝试使用 if 语句:
if cards[cardsIndex] == nil {
pullCard()
}
但是它不起作用。 请帮助我:)
最佳答案
我认为这里有问题:
let cardsIndex = randomCard - 1
应该是:
let cardsIndex = randomCard
事实上,您正在生成 randomCard
作为 0
和 (cards.count - 1)
之间的随机 Int
.
因此,randomCard
已经是 cards
的有效索引,无需减去 1
。
当随机生成的数字恰好是 0
时,您尝试访问 cards
的索引 -1
,这在这个宇宙中是不好的。
我承认这个错误与您在问题中给出的描述不完全匹配,但我建议您修复它并重试。
关于ios - 使用后从数组中删除元素 - Swift,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32424924/