Повторение — иерархия сотрудников
Часть раздела Объектно-ориентированное программирование путешествия по Swift на Coddy. Урок 26 из 57.
Задание
СложноСоздайте каталог сотрудников. Person хранит name и имеет role(), возвращающий person, а также card(), возвращающий Ada (person), сформированный на основе role(). 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()) }
Все уроки раздела Объектно-ориентированное программирование
1Классы и объекты
Работа с файламиОпределение классовМетоды и selfИнициализаторыКлассы — это ссылкиПовторение — читательский билет4Инкапсуляция
Контроль доступаТолько чтение извнеЗащита состоянияИнициализаторы с возможностью сбояПовторение — банковский счёт7Полиморфизм и обобщения
ПолиморфизмПриведение типовОбобщённые функцииОбобщённые типыПовторение — калькулятор фигур10Паттерны проектирования. Часть 2
Паттерн делегированияПаттерн декораторПаттерн строительПаттерн состояния2Структуры и типы-значения
СтруктурыСемантика значенийИзменяющие методыСтруктура или классПовторение — элемент инвентаря5Наследование
ПодклассыПереопределение методовИнициализаторы и superfinal и иерархииПовторение — иерархия сотрудников8Стандартные протоколы
CustomStringConvertibleEquatableComparableHashableПовторение — пользовательская сортировка11Проект: Управление библиотекой
Книги и читателиВыдача книгПотренируйтесь самостоятельно: Песочница Swift