我使用var
声明了一个数组,并在init()
中填充了它。然而,当我尝试改变这个数组时,我得到了很多错误,告诉我这个数组是不可变的。我错过了什么?
struct Deck {
var cards: Card[] = []
init () {
for i in 1...4 {
for ii in 1...13 {
self.cards.append(Card(rank: Rank.fromRaw(ii)!, suit: Suit.fromRaw(i)!))
}
}
}
func shuffle () {
var shuffledDeck: Card[] = []
var count = self.cards.count
for i in 1...52 {
var limit = count - i
var key = Int(arc4random_uniform(UInt32(limit)));
shuffledDeck.append(self.cards[key])
self.cards.removeAtIndex(key)
}
self.cards = shuffledDeck
}
}
我遇到的错误:
Playground execution failed: error:
<REPL>:75:22: error: immutable value of type 'Card[]' only has mutating members named 'removeAtIndex'
self.cards.removeAtIndex(key)
^ ~~~~~~~~~~~~~
<REPL>:78:24: error: cannot assign to 'cards' in 'self'
self.cards = shuffledDeck
let deck = Deck()
改为var deck = Deck()
才能使其工作。 - Guido Boumanlet deck = Deck()
定义了一个不可变的Deck
,而你又试图在shuffle
函数中对其进行改变。如果你想要做这种操作,我想知道将你的结构体改为类是否会是更好的方法。 - Mac_Cain13