2014-11-22 12 views
5

Qui è il mio codice:non possono modificare array multidimensionale utilizzando .last

var states:[[[Int]]] // I create an empty multidimensional array 
states = [[[0,0,0],[0,0,0],[0,0,0]]] // I give it a value 


// Why does here it doesn't work ? ('@ivalue $T11' is not identical to 'Int') 
states.last![0][0] = 1 

// And here it does ? 
states[0][0][0] = 1 

Non ricevo perché mi genera un errore in un caso e non nell'altro? Ho pensato che avrebbe fatto esattamente la stessa cosa ...

risposta

4

last restituisce l'ultimo elemento, ma non consente di impostare un nuovo valore. Infatti la proprietà implementa solo la get:

/// The last element, or `nil` if the array is empty 
var last: T? { get } 

Quindi non è possibile utilizzarlo per modificare la matrice.

Si noti che nel caso in cui l'elemento restituito sia un tipo di valore composito (ad esempio una struttura, come una matrice o un dizionario), viene restituita una copia dell'elemento effettivo archiviato nell'array. Pertanto, qualsiasi modifica apportata all'elemento restituito da last o una delle sue proprietà e dati viene eseguita solo su quella copia, senza influire sull'array originale.

+0

Grazie mille! :) –