Menu
CoddyTech

Ô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.

challenge icon

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

Tự luyện tập: Playground Swift