Con l'istruzione "var nome : String" dici semplicemente che la classe "cane" ha una variabile chiamata "nome" di tipo String. A questo punto sapresti dire quale sia il suo valore? No, perché tecnicamente non ha nessun valore assegnato. Infatti se elimini il costruttore (la funzione init) dovrebbe uscirti un errore in compilazione che ti avvisa di questo problema.
All'interno del costruttore (i metodi "init") specifichi
come creare l'oggetto. In questo caso particolare dici che nella variabile d'istanza "nome" ci va il contenuto del parametro chiamato "nome".
In generale potresti anche omettere il "self" nel caso in cui le variabili abbiano nomi diversi. Ad esempio:
class Punto {
var x: Int
init(coordinata: Int) {
x = coordinata
}
}
Implicitamente, questo sarebbe
identico a "self.x = coordinata".
Nel caso in cui le variabili abbiano lo stesso nome, però, il "self" è necessario per disambiguare la variabile locale (cioè il parametro della funzione init) dalla variabile d'istanza (cioè la variabile che contiene la proprietà dell'oggetto).