Ôn tập: Tài khoản ngân hàng
Thuộc phần Lập trình hướng đối tượng trong hành trình Swift của Coddy. Bài học 21 trên 57.
Thử thách
Trung bìnhHoàn thiện lớp BankAccount. Hàm khởi tạo có thể thất bại init?(owner:deposit:) từ chối chủ tài khoản trống hoặc khoản tiền gửi ban đầu âm. balance và transactions là private(set). deposit(_:) và withdraw(_:) ném AccountError.invalidAmount với số tiền nhỏ hơn 1; withdraw ném AccountError.insufficient(balance:) khi số tiền lớn hơn số dư. Mỗi thay đổi thành công được ghi lại trong transactions dưới dạng +50 hoặc -20. statement() trả về Ada: 30 (+50, -20), hoặc Ada: 0 (no transactions).
Code được cung cấp đọc tên chủ tài khoản và khoản tiền gửi ban đầu (name,amount), sau đó đọc các lệnh d n hoặc w n. Code in ra cannot open account nếu hàm khởi tạo thất bại; nếu không, code in ra invalid amount hoặc insufficient funds (balance 10) cho các lệnh thất bại, rồi cuối cùng in ra sao kê.
Đặt code của bạn trong AccountError.swift và BankAccount.swift. main.swift chứa code đầu vào/đầu ra được cung cấp và bạn không thể chỉnh sửa tệp này.
Tự làm thử
// Đoạn code đầu vào/đầu ra đã cung cấp: giữ nguyên.
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")
}
Tất cả bài học trong Lập trình hướng đối tượng
1Lớp và đối tượng
Làm việc với tệpĐịnh nghĩa lớpPhương thức và selfHàm khởi tạoLớp là tham chiếuÔn tập: Thẻ thư viện4Đóng gói
Kiểm soát quyền truy cậpChỉ đọc từ bên ngoàiBảo vệ trạng tháiHàm khởi tạo có thể thất bạiÔn tập: Tài khoản ngân hàng2Struct và kiểu giá trị
StructNgữ nghĩa giá trịPhương thức thay đổiStruct hay classÔn tập: mặt hàng trong kho5Kế thừa
Lớp conGhi đè phương thứcHàm khởi tạo và superfinal và hệ phân cấpÔn tập: hệ phân cấp nhân viên8Các giao thức tiêu chuẩn
CustomStringConvertibleEquatableComparableHashableÔn tập: Sắp xếp tùy chỉnhTự luyện tập: Playground Swift