2014-07-14 13 views
6

adında mutasyona uğramış değerlere sahiptir Bir Kart sınıfım ve bir Oyuncu sınıfım var.Tip [Kart] 'ın ölçülebilir değeri sadece

Player sınıfımda, [Card] dizisi alan ve buna bir Kart ekleyen bir fonksiyona sahibim. Ancak

, arayacağım ...

myCardArray.append(myCard) 

... Ben hata bu yüzden ben çözemiyorum

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

olsun? Bu neden değişmez olur? Bir sözlükte

cevap

8

var anahtar sözcüğüyle tanımlanır yalnızca bu yöntem kullanılarak güncellenebilir, sadece tahmin edebilirsiniz neler oldu

, sorunun hata mesajı söylediği gibi myCardArray, değişmez olmasıdır

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

gibi bir şey yapıyoruz gibi geliyor Eğer

Eğer myCardArray değişken kullanımını var

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

ilan edebilir veya bu bir dizi değil, sözlüğü kendisine

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

Çok teşekkürler Bryan! Var anahtar kelimesinin eklenmesi işe yaradı. Neden olduğunu merak ediyorum, bunu bir parametrede kullanmak zorunda olduğumu hatırlamıyorum. – Brejuro

+0

@ user3356655 varsayılan olarak, parametreler 'let' ile bildirilmiş gibi değiştirilemez. dokümanda bir yerde bahsediliyor ama şimdi onu bulmak için çok tembelim. –

+0

"veya bunun değiştirilemez bir kopyasını oluştur" Sadece başka bir değişkene atamak için sabit bir parametre almanın bir anlamı yoktur. – newacct