Menu
Coddy logo textTech

Initialisierer

Teil des Abschnitts Objektorientierte Programmierung der Swift-Journey von Coddy. Lektion 4 von 57.

Ein Initialisierer, geschrieben als init, wird ausgeführt, wenn eine Instanz erstellt wird, und weist den Eigenschaften ihre Anfangswerte zu. Seine Parameter werden zu den Argumenten des Typsaufrufs:

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)

Ausgabe:

Dune
412

Jede Eigenschaft benötigt einen Wert, bevor die Instanz verwendet werden kann. Eine Eigenschaft ohne Standardwert muss in init festgelegt werden, andernfalls wird die Klasse nicht kompiliert. Eine mit let deklarierte Eigenschaft kann in init einmal festgelegt und danach nie mehr geändert werden:

class Book {
    let isbn: String     // einmal setzen, in init
    var title: String

    init(isbn: String, title: String) {
        self.isbn = isbn
        self.title = title
    }
}

Parameter von init können Standardwerte haben, sodass Aufrufer nur das angeben, was abweicht:

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

Ausgabe:

egg 300
timer 30

Eine Klasse kann mehr als einen Initialisierer haben, jeweils mit unterschiedlichen Parametern. Ein convenience init ergänzt einige Werte und ruft den Hauptinitialisierer mit self.init(...) auf:

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)

Ausgabe:

20.0
100.0
challenge icon

Aufgabe

Einfach

Schreibe den Initialisierer der Klasse Account. Er übernimmt owner und ein optionales balance, dessen Standardwert 0 ist, und speichert beide. Vervollständige anschließend summary(), das Ada has 150 zurückgibt.

Der bereitgestellte Code liest einen Besitzer ein und, wenn eine zweite Zeile vorhanden ist, einen Anfangssaldo. Er erstellt das Konto mit oder ohne den Saldo und gibt summary() aus.

Dein Code gehört in Account.swift. main.swift enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.

Probier es selbst

// Mitgelieferter Ein-/Ausgabecode: belasse ihn unverändert
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 iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Swift-Playground