Initialiseurs
Fait partie de la section Programmation orientée objet du Journey Swift de Coddy. Leçon 4 sur 57.
Un initialiseur, écrit init, s’exécute lorsqu’une instance est créée et attribue aux propriétés leurs valeurs initiales. Ses paramètres deviennent les arguments de l’appel du type :
class Book {
var title: String
var pages: Int
init(title: String, pages: Int) {
self.title = title
self.pages = pages
}
}
let book = Book(title: "Dune", pages: 412)
print(book.title)
print(book.pages)Sortie :
Dune
412Chaque propriété doit avoir une valeur avant que l’instance puisse être utilisée. Une propriété sans valeur par défaut doit être définie dans init, sinon la classe ne compile pas. Une propriété déclarée avec let peut être définie une seule fois dans init et ne peut plus être modifiée ensuite :
class Book {
let isbn: String // défini une seule fois, dans init
var title: String
init(isbn: String, title: String) {
self.isbn = isbn
self.title = title
}
}Les paramètres de init peuvent avoir des valeurs par défaut, afin que les appelants ne fournissent que ce qui diffère :
class Timer {
var seconds: Int
var label: String
init(seconds: Int, label: String = "timer") {
self.seconds = seconds
self.label = label
}
}
let egg = Timer(seconds: 300, label: "egg")
let quick = Timer(seconds: 30)
print("\(egg.label) \(egg.seconds)")
print("\(quick.label) \(quick.seconds)")Sortie :
egg 300
timer 30Une classe peut avoir plusieurs initialisateurs, chacun avec des paramètres différents. Un convenience init renseigne certaines valeurs et appelle l’initialisateur principal avec self.init(...) :
class Temperature {
var celsius: Double
init(celsius: Double) {
self.celsius = celsius
}
convenience init(fahrenheit: Double) {
self.init(celsius: (fahrenheit - 32) * 5 / 9)
}
}
print(Temperature(celsius: 20).celsius)
print(Temperature(fahrenheit: 212).celsius)Sortie :
20.0
100.0Défi
FacileÉcrivez l’initialiseur de la classe Account. Il prend owner et un balance facultatif dont la valeur par défaut est 0, puis stocke les deux. Complétez ensuite summary(), qui renvoie Ada has 150.
Le code fourni lit un propriétaire et, lorsqu’une deuxième ligne est présente, un solde initial. Il crée le compte avec ou sans le solde, puis affiche summary().
Votre code doit se trouver dans Account.swift. main.swift contient le code fourni d’entrée/sortie et ne peut pas être modifié.
Essayez vous-même
// Code d'entrée/sortie fourni : le garder tel quel
var input: [String] = []
while let line = readLine() { input.append(line) }
let account = input.count > 1 ? Account(owner: input[0], balance: Int(input[1])!) : Account(owner: input[0])
print(account.summary())
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation orientée objet
1Classes et objets
Travailler avec des fichiersDéfinir des classesMéthodes et selfInitialiseursLes classes sont des référencesRécapitulatif - Carte de bibliothèque4Encapsulation
Contrôle d’accèsLecture seule depuis l’extérieurProtection de l’étatInitialiseurs pouvant échouerRécapitulatif - Compte bancaire7Polymorphisme et génériques
PolymorphismeConversion de typeFonctions génériquesTypes génériquesRécapitulatif - Calculateur de formes2Structures et types valeur
StructuresSémantique de valeurMéthodes mutantesStructure ou classeRécapitulatif - article d’inventaire5Héritage
Sous-classesRedéfinition des méthodesInitialiseurs et superfinal et hiérarchiesRécapitulatif - hiérarchie des employés8Protocoles standard
CustomStringConvertibleEquatableComparableHashableRécapitulatif - Tri personnalisé11Projet : Gestion de bibliothèque
Livres et membresEmprunter des livresEntraînez-vous par vous-même : Playground Swift