2014-07-14 11 views
6

Ho una classe Card e una classe Player.Valore immutabile del tipo [Card] ha solo i valori di mutazione del nome append

Nella mia classe Player ho una funzione che accetta una matrice [Card] e aggiunge una scheda.

Tuttavia, quando chiamo ...

myCardArray.append(myCard) 

... ottengo l'errore

Immutable value of type [Card] only has mutating values of name append 

io non riesco a capire perché questo è? Perché questo sarebbe immutabile?

risposta

8

senza più codice, possiamo solo immaginare che cosa successo

suona come si sta facendo qualcosa di simile

func addCard(_ myCardArray: [Card]) -> [Card] { 
    let myCard = Card() 
    myCardArray.append(myCard) 
    return myCardArray 
} 

il problema è che myCardArray è immutabile, come diceva il messaggio di errore, Non è possibile modificarlo

si può dichiarare myCardArray uso mutevole var

func addCard(var _ myCardArray: [Card]) -> [Card] { 
    let myCard = Card() 
    myCardArray.append(myCard) 
    return myCardArray 
} 

o creare una copia di esso mutabile

func addCard(_ myCardArray: [Card]) -> [Card] { 
    let myCard = Card() 
    var mutableMyCardArray = myCardArray 
    mutableMyCardArray.append(myCard) 
    return mutableMyCardArray 
} 
+0

Grazie mille Bryan! L'aggiunta della parola chiave var ha funzionato. Mi chiedo perché sia ​​così, non ricordo di doverlo mai usare su un parametro. – Brejuro

+0

@ user3356655 per impostazione predefinita, i parametri sono immutabili come dichiarato con 'let'. è menzionato da qualche parte nel doc, ma sono troppo pigro per scoprirlo ora. –

+0

"o creane una copia mutabile" Non ha senso prendere un parametro costante solo per assegnarlo a un'altra variabile. – newacct

Problemi correlati