Podsumowanie — konto bankowe
Część sekcji Programowanie obiektowe ścieżki Swift w Coddy. Lekcja 21 z 57.
Wyzwanie
ŚredniUzupełnij klasę BankAccount. Jej failable initializer init?(owner:deposit:) odrzuca pustego właściciela lub ujemną wpłatę początkową. balance i transactions mają modyfikator private(set). Metody deposit(_:) i withdraw(_:) zgłaszają błędy AccountError.invalidAmount dla kwot mniejszych niż 1, a withdraw zgłasza błąd AccountError.insufficient(balance:), gdy kwota jest większa niż saldo; każda udana zmiana jest zapisywana w transactions jako +50 lub -20. statement() zwraca Ada: 30 (+50, -20) lub Ada: 0 (no transactions).
Dostarczony kod odczytuje właściciela i wpłatę początkową (name,amount), a następnie polecenia d n lub w n. Jeśli initializer się nie powiedzie, wypisuje cannot open account; w przeciwnym razie wypisuje invalid amount lub insufficient funds (balance 10) dla nieudanych poleceń, a na końcu wyciąg.
Twój kod umieść w plikach AccountError.swift i BankAccount.swift. main.swift zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
// Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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")
}
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasMetody i selfInicjalizatoryKlasy są referencjamiPowtórzenie — karta biblioteczna4Hermetyzacja
Kontrola dostępuTylko do odczytu z zewnątrzOchrona stanuInicjalizatory, które mogą zawieśćPodsumowanie — konto bankowe7Polimorfizm i typy generyczne
PolimorfizmRzutowanie typówFunkcje generyczneTypy generycznePodsumowanie – kalkulator kształtów2Struktury i typy wartościowe
StrukturySemantyka wartościMetody modyfikująceStruktura czy klasaPodsumowanie – element inwentarza5Dziedziczenie
PodklasyPrzesłanianie metodInicjalizatory i superfinal i hierarchiePodsumowanie — hierarchia pracowników8Standardowe protokoły
CustomStringConvertibleEquatableComparableHashablePodsumowanie — własne sortowanie11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Edytor online Swift