【问题标题】:Delete element from Array after use - Swift使用后从数组中删除元素 - Swift
【发布时间】:2015-12-02 04:45:20
【问题描述】:

我的卡片由 52 张卡片组成,所以我为它们创建了一个array,当用户点击屏幕时,就会显示一张卡片。

我希望当一张卡片被拉出来以后,它就不能再被拉出来了。我使用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()
}

但它不起作用。 请帮帮我:)

【问题讨论】:

  • 你的意思是你的if语句是cards[cardsIndex] != nil

标签: ios arrays swift random swift2


【解决方案1】:

我觉得这里有问题:

let cardsIndex = randomCard - 1

应该是:

let cardsIndex = randomCard

事实上,您在0(cards.count - 1) 之间生成randomCard 作为随机Int

所以randomCard 已经是cards有效索引,无需减去1。 当随机生成的数字恰好是0 时,您尝试访问cards 的索引-1,这在这个宇宙中很糟糕。

我承认这个错误与您在问题中给出的描述不完全匹配,但我建议您修复它并重试。

【讨论】:

  • 这应该可以解决问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-04
  • 2012-01-05
  • 2011-10-31
相关资源
最近更新 更多