
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”)