Self in Swift

di il
4 risposte

Self in Swift

Buonasera, sono nuovo nella programmazione in swift, e studiando le classi ho visto che questo linguaggio utilizza l'istruzione self, della quale però non ne ho capito il significato, questo è il sorgente :
class cane {
    var nome : String
    var altezza : Int
    init(nome: String , altezza :Int ){
        self.nome = nome;
        self.altezza = altezza;
    }

}
Potreste piegarmi per piacere che significa questa istruzione, poiché ho cercato sul web ma non ho trovato una risposta soddisfacente.

4 Risposte

  • Re: Self in Swift

    Ciao, il "self" si riferisce a se stesso, l'oggetto "cane" che verrà istanziato. Equivale al "this" di Java.
    È un concetto magari un po ostico da comprendere all'inizio, ma è una cosa facile.

    Nello specifico quel codice dice che ogni oggetto di tipo "cane" ha 2 attributi, nome e altezza. Il "self" in questo caso è necessario per disambiguare le variabili locali e di istanza, che hanno lo stesso nome.
  • Re: Self in Swift

    Grazie mille!
    Io comunque non ho capito a cosa serva mettere self.nome = nome , se , quando si va a istanziare un oggetto attraverso l' inizializzatore init si specificano già le proprietà dell'oggetto in questione.
    Non capisco proprio a cosa servano sia l'istruzione self che le istruzioni di per se nel corpo del costruttore.
  • Re: Self in Swift

    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).
  • Re: Self in Swift

    Grazie mille! risposta veramente esaustiva
Devi accedere o registrarti per scrivere nel forum
4 risposte