Nous ne voulons pas définir des valeurs par défaut à nos classes. Pourquoi? Car ces valeurs seront différentes à chaque fois. Vous n’aurez pas toujours le même mac avec la même configuration ou la même voiture de la même couleur avec le même kilométrage.

Pour cela nous avons des Constructeurs, définis par le mot clé init qui nous permet de créer des objets avec des valeurs personnalisées.

Nous allons commencer par supprimer les valeurs par défaut. j’ai aussi volontairement réduit les propriétés pour clarifier au mieux:

class Ordinateur {
    var marque: String
    var modele: String
    var ram: Int
    var stockage: Int
} 

A ce  moment la, une erreur apparaît, disant que nous n’avons pas d’initialiseur, ou de constructeur.

class Ordinateur {
    var marque: String
    var modele: String
    var ram: Int
    var stockage: Int
    init(marque: String, modele: String, ram: Int, stockage: Int) {
        self.marque = marque
        self.modele = modele
        self.ram = ram
        self.stockage = stockage
    }
} 

Notre Constructeur est fait, les noms des paramètres dans le init sont explicitement les même que les noms des propriétés pour bien comprendre de qui correspond à qui. Ensuite, j’attribue les valeurs aux propriétés correspondantes.

Le self signifie soi-même, la propriété ou variable dite de ‘top level’ à la base de la classe. Dans ce case, ce sont nos propriétés. Sans le self, il y aurait confusion entre le nom du paramètre et la propriété.

Maintenant, si je veux créer un objet, je devrai utiliser cet init. Vous remarquerez

que dès l’ouverture des parenthèses, l’auto complétion agit.

var macbook = Ordinateur(marque: “Apple”, modele: “Macbook pro”, ram: 16, stockage: 128)
 

Passons aux structures maintenant. Si j’enlève les valeurs par défaut. Il n’y a pas d’erreur. La structure crée automatique son init avec les valeurs dont elle a besoin.

struct Voiture {
    //Ajout des propriétés
    var marque: String
    var modèle: String
    var année: Int
    var kms: Int
    var couleur: String
} 

Et lors de la création de l’objet, notre init est bien là:

var punto = Voiture(marque: “Fiat”, modèle: “Punto Evo”, année: 2012, kms: 120000, couleur: “Jaune”)