Zadeklarowałem tablicę przy użyciu var
i wypełniłem ją w ramach init()
. Jednak kiedy próbuję mutować tę tablicę, dostaję mnóstwo błędów, informujących o tym, że tablica jest niezmienna. Czego tu mi brakuje?Niezmienna wartość ma tylko elementy mutujące
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
}
}
Błędy Dostaję:
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
Niesamowite, dzięki! Tak było. Musiałem zmienić 'let deck = Deck()' na 'var deck = Deck()', aby to działało. –
To dlatego, że z 'let deck = Deck()' zdefiniowałeś 'Deck' jako niezmienny i próbujesz go zmutować za pomocą funkcji shuffle. Zastanawiam się, czy zmiana struktury na klasę byłaby lepszym rozwiązaniem, jeśli chcesz robić tego rodzaju rzeczy. –
Korzystanie z zajęć to zdecydowanie lepsze podejście do tego pomysłu. –