2014-09-13 4 views
7

In Swift, denotiamo una variabile immutabile con let.Perché le proprietà di un oggetto immutabile sono modificabili in Swift?

Quello che non capisco è perché si cambiano le loro proprietà. Per esempio:

let lbl = UILabel() 
lbl.textAlignment = .Right() 

Perché si può cambiare textAlignment? In virtù della mutazione della proprietà, non abbiamo mutato anche la variabile lbl che doveva essere costante?

+0

La * variabile/associazione * non può essere riassegnata a un valore diverso; questo da solo non dice nulla sulla mutabilità dell'oggetto che risulta dalla valutazione della variabile. Questo è lo stesso delle variabili/campi finali/readonly in Java e C#. – user2864740

risposta

14

Secondo la Swift Programming Language, le proprietà costanti struct sono anche costante, ma costanti classi può avere proprietà modificabili.

Nelle loro parole,

Se si crea un'istanza di una struttura e di assegnare l'istanza a una costante, non è possibile modificare le proprietà dell'istanza, anche se sono stati dichiarati come proprietà delle variabili ...

Lo stesso non vale per le classi, che sono tipi di riferimento. Se assegni un'istanza di un tipo di riferimento a una costante, puoi comunque modificare le proprietà della variabile dell'istanza.

+0

Grazie, lo spiega perfettamente. Accetterò quando posso. –

3

I tipi di classe sono tipi di riferimento: il valore è un puntatore a un oggetto. Non essere in grado di cambiarlo significa semplicemente non cambiare il riferimento, per puntare a un altro oggetto. Non ha nulla a che fare con ciò che puoi fare con l'oggetto puntato.