Sách và thành viên
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 50 trên 57.
Trong dự án này, bạn xây dựng phần cốt lõi của một hệ thống thư viện. Lớp Library nhận các lệnh, mỗi dòng một lệnh, rồi phản hồi từng lệnh. Qua năm bước, hệ thống sẽ học cách thêm sách và thành viên, cho mượn và nhận lại sách, tìm kiếm danh mục và in báo cáo.
ADD_BOOK 1 Dune
JOIN ada
BORROW ada 1
RETURN ada 1
SEARCH dune
REPORTMô hình dữ liệu sử dụng các công cụ trong phần này. Book là một cấu trúc: một giá trị có borrower thay đổi. Member là một lớp, vì thư viện và danh sách khoản mượn của một thành viên cùng tham chiếu đến một người. Thư viện lưu cả hai trong các từ điển riêng tư, vì vậy chỉ các phương thức của thư viện mới có thể thay đổi chúng:
struct Book {
let id: Int
let title: String
var borrower: String? = nil
var isAvailable: Bool { borrower == nil }
}
var books: [Int: Book] = [:]
books[1] = Book(id: 1, title: "Dune")
books[1]!.borrower = "ada"
print(books[1]!.isAvailable)Đầu ra:
falsehandle(_:) tách lệnh và xét từ đầu tiên. Mỗi nhánh trả về các phản hồi dưới dạng một mảng, vì vậy một lệnh như REPORT có thể phản hồi bằng nhiều dòng. Tên sách có thể chứa dấu cách, vì vậy tên sách là toàn bộ phần sau id:
let p = "ADD_BOOK 7 The Hobbit".split(separator: " ").map(String.init)
let id = Int(p[1])!
let title = p.dropFirst(2).joined(separator: " ")
print("\(id): \(title)")Đầu ra:
7: The HobbitThử thách
DễHoàn thiện Library.handle(_:) cho hai lệnh đầu tiên:
ADD_BOOK <id> <title>: lưu một cuốn sách mới đang có sẵn và trả lờiadded book 1: Dune; nếu id đã được dùng, hãy trả lờibook 1 exists.JOIN <name>: thêm một thành viên và trả lờiwelcome ada; nếu tên đã tồn tại, hãy trả lờiada is already a member.
Code được cung cấp chuyển từng dòng đầu vào cho library.handle(_:) và in mỗi câu trả lời trả về trên một dòng riêng. Tên thành viên là các từ đơn viết thường, id sách là số nguyên và đầu vào chỉ chứa các lệnh đã mô tả đến thời điểm này. Với mọi lệnh khác, hãy trả lời unknown command.
Code của bạn nằm trong Book.swift, Member.swift và Library.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 có sẵn: giữ nguyên
var input: [String] = []
while let line = readLine() { input.append(line) }
let library = Library()
for line in input {
for reply in library.handle(line) { print(reply) }
}
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
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ện2Struct 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