Menu
Coddy logo textTech

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
412

Chaque 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 30

Une 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.0
challenge icon

Dé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())
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Playground Swift