Rückblick – Bankkonto
Teil des Abschnitts Objektorientierte Programmierung der Swift-Journey von Coddy. Lektion 21 von 57.
Aufgabe
MittelVervollständige die Klasse BankAccount. Ihr fehlbarer Initialisierer init?(owner:deposit:) lehnt einen leeren Besitzer oder eine negative Ersteinzahlung ab. balance und transactions sind private(set). deposit(_:) und withdraw(_:) lösen bei Beträgen unter 1 den Fehler AccountError.invalidAmount aus, und withdraw löst AccountError.insufficient(balance:) aus, wenn der Betrag größer als das Guthaben ist; jede erfolgreiche Änderung wird in transactions als +50 oder -20 aufgezeichnet. statement() gibt Ada: 30 (+50, -20) oder Ada: 0 (no transactions) zurück.
Der bereitgestellte Code liest den Besitzer und die Ersteinzahlung (name,amount) und anschließend die Befehle d n oder w n. Wenn der Initialisierer fehlschlägt, gibt er cannot open account aus; andernfalls gibt er für fehlgeschlagene Befehle invalid amount oder insufficient funds (balance 10) aus und schließlich den Kontoauszug.
Dein Code gehört in AccountError.swift und BankAccount.swift. main.swift enthält den bereitgestellten Eingabe-/Ausgabecode und darf nicht bearbeitet werden.
Probier es selbst
// Gelieferter Ein-/Ausgabecode: belasse ihn wie er ist
var input: [String] = []
while let line = readLine() { input.append(line) }
let head = input[0].split(separator: ",", omittingEmptySubsequences: false).map(String.init)
if let account = BankAccount(owner: head[0], deposit: Int(head[1])!) {
for cmd in input.dropFirst() {
let p = cmd.split(separator: " ")
let n = Int(p[1])!
do {
if p[0] == "d" { try account.deposit(n) } else { try account.withdraw(n) }
} catch AccountError.insufficient(let balance) {
print("insufficient funds (balance \(balance))")
} catch {
print("invalid amount")
}
}
print(account.statement())
} else {
print("cannot open account")
}
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