Ôn tập: hệ phân cấp nhân 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 26 trên 57.
Thử thách
KhóXây dựng một danh bạ nhân viên. Person lưu name và có role() trả về person, cùng card() trả về Ada (person), được tạo từ role(). Staff: Person bổ sung department, được đặt trong hàm khởi tạo riêng trước super.init, đồng thời ghi đè role() để trả về staff in <department>. Manager: Staff bổ sung team (một mảng Staff, ban đầu rỗng), một phương thức hire(_:) và ghi đè role() để trả về vai trò của Staff, theo sau là , 2 reports. Contractor: Person là final, bổ sung days và ghi đè role() để trả về contractor for 30 days.
Code được cung cấp đọc các dòng staff,name,dept, manager,name,dept, contractor,name,days và hire,manager,staff (người quản lý tuyển một nhân viên theo tên). Code này in ra card() của từng người theo thứ tự họ được tạo.
Code của bạn nằm trong các tệp Person.swift, Staff.swift, Manager.swift và Contractor.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) }
var people: [Person] = []
for line in input {
let p = line.split(separator: ",").map(String.init)
switch p[0] {
case "staff": people.append(Staff(name: p[1], department: p[2]))
case "manager": people.append(Manager(name: p[1], department: p[2]))
case "contractor": people.append(Contractor(name: p[1], days: Int(p[2])!))
default:
let boss = people.first { $0.name == p[1] } as? Manager
let member = people.first { $0.name == p[2] } as? Staff
if let boss = boss, let member = member { boss.hire(member) }
}
}
for person in people { print(person.card()) }
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