2015-07-24 13 views
8

ho creato un NSMutableArray in rapida utilizzando let e quando aggiungo addObject nel mutableArray allora questo verrà aggiunto anche se ho usato il let per assegnare una costante. Qualcuno può spiegare come funziona let in swift? Se non ti consente di aggiungere valore in seguito, come funziona il seguente codice ?Come può NSMutableArray aggiungere oggetto utilizzando lasciate in rapida

let arr : NSMutableArray = [1,2,3,4,5] 
arr.addObject(6) 
println(arr) 
+0

'let' non significa che la matrice non è mutevole. Significa che la variabile 'arr' non può essere impostata su nessun altro oggetto. – ryancrunchi

+0

Puoi spiegarlo per favore con i dettagli? Perché quello che capisco è let significa una variabile costante, quindi come possiamo aggiungere un oggetto alla variabile costante? – user3812547

+0

@ryancrunchi In realtà l'array non è davvero mutabile quando si usa let. Provalo su un array Swift. – Boon

risposta

9

disclaimer: questa risposta si applica solo alle strutture di tipo di dati NS, vedere @Eric D's risposta per il quadro completo

let quando viene utilizzato con una classe significa semplicemente la variabile cant essere cambiato, ad esempio, per un altro array. Se non volete la matrice sia modificabile, utilizzare un normale NSArray e non mutabile uno

let arr : NSMutableArray = [1,2,3,4,5] 
arr = [1,2,3,4,5] //error trying to assign to a let variable that has already been assigned 

arr.addObject(6) //fine because we are not changing what is assigned to arr, but we are allowed to change the object that is assigned to arr itself 

Credo che la vostra comprensione di ciò che una variabile costante è, è un po 'troppo severo.

+0

Volevo sapere che se let indica la variabile che non può essere modificata, come posso cambiarlo usando NSMuatbleArray? – user3812547

+0

let significa solo il valore assegnato alla variabile non può cambiare, non è mai assegnato a esso non può cambiare, per esempio non puoi andare, 'lascia arr = [1,2,3]' poi vai 'arr = [4,5 , 6] 'perché ciò che assegna un array completamente diverso alla variabile – Fonix

+0

' arr.addObject' aggiunge un oggetto alla stessa variabile, non assegna un nuovo array. – ryancrunchi

10

Le classi sono tipi di riferimento e NSMutableArray è una classe.

NSMutableArray della Foundation è diverso da Swift's Array: il secondo è un tipo di valore.

Se si crea un NSMutableArray costante:

let ns: NSMutableArray = ["a", "b"] 

allora questo funziona:

ns.addObject("c") 

ma questo non lo fa:

ns = ["d", "e"] // nope! 

perché è possibile modificare il contenuto della riferimento ma non è possibile modificare ciò che viene assegnato alla costante.

D'altra parte, con array di Swift:

let sw: [String] = ["a", "b"] 

la costante non può essere modificato perché è un valore, non un riferimento.

sw.append("c") // nope! 

Doc: Structures and Enumerations Are Value Types e Classes Are Reference Types

+1

Credo che questa risposta sia la risposta giusta: "NSMutableArray della Foundation è diverso da Swift's Array: quest'ultimo è un tipo di valore." – Jacky

+1

Risposta giusta ... – Boon

Problemi correlati