Le propietà in Swift

Esistono sostanzialmente due tipi di proprietà: stored e computed.
La differenza sostanziale è che le stored properties associano valori (costanti o variabili) all’istanza di una classe mentre le computed properties non hanno valore associato ma questo viene calcolato al momento necessario.

Un’altra differenza consiste nel fatto che le Computed Properties sono disponibili in classi, strutture e enumerazioni, mentre le Stored Properties solo all’interno di classi e strutture.

Stored Properties

Un semplice esempio di una classe cerchio:

La classe cerchio ha una variabile di istanza chiamata raggio  con valore predefinito uguale a 0. In Swift, ogni variabile di istanza è automaticamente una proprietà (molto comodo).
Per ogni variabile di istanza (e quindi per ogni stored property) è possibile aggiungere cosiddetti property observers. In Swift ci sono due tipi di property observers: uno invocato prima che il nuovo valore sia assegnato e l’altro dopo che il nuovo valore è stato assegnato.

Il property observer che viene chiamato prima dell’assegnazione viene contrassegnato con la parola chiave willSet .

E’ possibile accedere al valore che sta per essere assegnato con la variabile newValue .

Il property observer che viene chiamato dopo l’assegnazione viene contrassegnato con la parola chiave didSet .

E’ possibile accedere al vecchio valore della proprietà tramite la variabile oldValue .

Computed Properties

Le Computed Properties non hanno un valore associato; il valore viene calcolato (computed) ogni volta che vengono chiamate / utilizzate. Utilizzando la classe Cerchio possiamo definire una nuova proprietà area  come computed property.

Per una computed property è obbligatorio definire un get . In assenza di un set  la computed property è di tipo read-only.

Lazy Properties

Utilizzando il modificatore lazy  il valore di una proprietà viene inizializzato / calcolato solo quando la proprietà viene chiamata per la prima volta. Il modificatore lazy  è ovviamente applicabile alle sole stored properties.