Повторение — банковский счёт
Часть раздела Объектно-ориентированное программирование путешествия по Swift на Coddy. Урок 21 из 57.
Задание
СреднеЗавершите класс BankAccount. Его инициализатор, допускающий сбой, init?(owner:deposit:) отклоняет пустого владельца или отрицательный первоначальный вклад. balance и transactions имеют модификатор private(set). Методы deposit(_:) и withdraw(_:) выбрасывают ошибку AccountError.invalidAmount для сумм меньше 1, а withdraw выбрасывает ошибку AccountError.insufficient(balance:), если сумма больше баланса; каждое успешное изменение записывается в transactions как +50 или -20. statement() возвращает Ada: 30 (+50, -20) или Ada: 0 (no transactions).
Предоставленный код считывает имя владельца и первоначальный вклад (name,amount), а затем команды d n или w n. Если инициализатор завершается ошибкой, он выводит cannot open account; в противном случае для неудачных команд он выводит invalid amount или insufficient funds (balance 10), а в конце — выписку.
Ваш код должен находиться в AccountError.swift и BankAccount.swift. Файл main.swift содержит предоставленный код ввода/вывода, и его нельзя изменять.
Попробуйте сами
// Предоставленный код ввода/вывода: оставьте его как есть
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")
}
Все уроки раздела Объектно-ориентированное программирование
1Классы и объекты
Работа с файламиОпределение классовМетоды и selfИнициализаторыКлассы — это ссылкиПовторение — читательский билет4Инкапсуляция
Контроль доступаТолько чтение извнеЗащита состоянияИнициализаторы с возможностью сбояПовторение — банковский счёт7Полиморфизм и обобщения
ПолиморфизмПриведение типовОбобщённые функцииОбобщённые типыПовторение — калькулятор фигур10Паттерны проектирования. Часть 2
Паттерн делегированияПаттерн декораторПаттерн строительПаттерн состояния2Структуры и типы-значения
СтруктурыСемантика значенийИзменяющие методыСтруктура или классПовторение — элемент инвентаря5Наследование
ПодклассыПереопределение методовИнициализаторы и superfinal и иерархииПовторение — иерархия сотрудников8Стандартные протоколы
CustomStringConvertibleEquatableComparableHashableПовторение — пользовательская сортировка11Проект: Управление библиотекой
Книги и читателиВыдача книгПотренируйтесь самостоятельно: Песочница Swift