ios - 使用后从数组中删除元素 - Swift

标签 ios arrays swift random swift2

我的卡片由 52 张卡片组成,因此我为它们创建了一个数组,当用户单击屏幕时,就会显示一张卡片。

我希望当一张卡被拉取后,以后就不能再被拉取了。我使用 removeAtIndexarray 中删除拉出的卡片。当用户触摸屏幕任意位置时,将调用函数 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/

相关文章:

JavaScript; html 形式;用户输入;显示输入

ios - 多个持久化 View Controller

iOS 递归动画异常

ios - 使用外部源的 subview 中的视频播放器不缩放

c++ - 程序集文件 (.s) 抛出错误 : unknown use of instruction mnemonic without a size suffix

arrays - 帮助理解斐波那契搜索

ios - iPhone:用 UITextField 替换单元格的 View

javascript - 在 JavaScript 中,为什么 [ ] 优于 new Array();?

ios - Xcode 编辑器在编译时花费太多时间

objective-c - 使用未声明的类型 "NSManagedObjectModel"