回顾:员工继承层次结构
本课属于 Coddy Swift 学习旅程的“面向对象编程”单元。第 26 课,共 57 课。
挑战
困难构建一个员工目录。Person 存储 name,并有一个 role() 函数,返回 person;还有一个 card() 函数,返回由 role() 构建的 Ada (person)。Staff: Person 添加 department,在自己的初始化器中、调用 super.init 之前设置它,并重写 role(),使其返回 staff in <department>。Manager: Staff 添加 team(一个初始为空的 Staff 数组)、一个 hire(_:) 方法,并重写 role(),使其返回 Staff 的角色,后面接上 , 2 reports。Contractor: Person 是 final 类,添加 days,并重写 role(),使其返回 contractor for 30 days。
提供的代码会读取以下行:staff,name,dept、manager,name,dept、contractor,name,days 和 hire,manager,staff(经理通过姓名雇用一名员工)。它会按创建顺序,为每个人打印 card()。
你的代码写在 Person.swift、Staff.swift、Manager.swift 和 Contractor.swift 中。main.swift 包含提供的输入/输出代码,不能编辑。
亲手试试
// 提供的输入和输出代码:保持原样
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()) }
面向对象编程中的所有课
自己练习: Swift 在线编辑器