Menu
Coddy logo textTech

Rückblick – Bankkonto

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

challenge icon

Aufgabe

Mittel

Vervollstä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

Übe selbstständig: Swift-Playground