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
412Jede 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 30Eine 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.0Aufgabe
EinfachSchreibe 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())
Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Klassen und Objekte
Arbeiten mit DateienKlassen definierenMethoden und selfInitialisiererKlassen sind ReferenzenRückblick – Bibliotheksausweis4Kapselung
ZugriffskontrolleVon außen schreibgeschütztZustand schützenFehlschlagende InitialisiererRückblick – Bankkonto7Polymorphismus und Generika
PolymorphismusTypumwandlungGenerische FunktionenGenerische TypenZusammenfassung – Shape-Rechner2Strukturen und Werttypen
StrukturenWertsemantikVerändernde MethodenStruktur oder KlasseZusammenfassung – Inventarelement5Vererbung
UnterklassenMethoden überschreibenInitialisierer und superfinal und HierarchienRückblick – Mitarbeiterhierarchie8Standardprotokolle
CustomStringConvertibleEquatableComparableHashableRückblick – Benutzerdefiniertes Sortieren11Projekt: Bibliotheksverwaltung
Bücher und MitgliederBücher ausleihenÜbe selbstständig: Swift-Playground