2015-09-06 65 views
2

我的卡片由52張卡片組成,所以我爲他們創建了一個array,並且當用戶點擊屏幕時,顯示卡片。使用後從數組中刪除元素 - 斯威夫特

我希望當一張卡被拉時,將來不能再拉它。我用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() 
} 

但它不工作。 請幫我:)

+0

你的意思是你的if語句是'cards [cardsIndex]!= nil'? – keithbhunter

回答

5

我認爲這裏有一個問題:

let cardsIndex = randomCard - 1 

它應該是:

let cardsIndex = randomCard 

逸岸你生成randomCard0(cards.count - 1)之間的隨機Int

所以randomCard已經是一個有效索引cards,就沒有必要減去1。 當隨機生成的數字碰巧爲0時,您嘗試訪問cards的索引-1,這在這個Universe中是不好的。

我承認這個錯誤與您在問題中給出的描述完全不符,但我建議您修復它並重試。

+1

這應該解決這個問題。 – Shoaib

+1

非常感謝,它的工作原理! – fredericdnd