Podsumowanie — hierarchia pracowników
Część sekcji Programowanie obiektowe ścieżki Swift w Coddy. Lekcja 26 z 57.
Wyzwanie
TrudnyUtwórz katalog pracowników. Person przechowuje name i ma funkcję role(), która zwraca person, oraz card(), która zwraca Ada (person), utworzone na podstawie role(). Staff: Person dodaje department, ustawiane we własnym inicjalizatorze przed super.init, i nadpisuje role(), aby zwracała staff in <department>. Manager: Staff dodaje team (tablicę typu Staff, początkowo pustą), metodę hire(_:) i nadpisuje role(), aby zwracała rolę Staff, po której następuje , 2 reports. Contractor: Person jest oznaczona jako final, dodaje days i nadpisuje role(), aby zwracała contractor for 30 days.
Dostarczony kod odczytuje wiersze staff,name,dept, manager,name,dept, contractor,name,days i hire,manager,staff (menedżer zatrudnia pracownika na podstawie jego imienia). Wypisuje wynik card() dla każdej osoby, w kolejności ich utworzenia.
Twój kod umieść w plikach Person.swift, Staff.swift, Manager.swift i Contractor.swift. main.swift zawiera dostarczony kod wejścia/wyjścia i nie można go edytować.
Spróbuj swoich sił
// Dostarczony kod wejścia/wyjścia: pozostaw go bez zmian
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()) }
Wszystkie lekcje w sekcji Programowanie obiektowe
1Klasy i obiekty
Praca z plikamiDefiniowanie klasMetody i selfInicjalizatoryKlasy są referencjamiPowtórzenie — karta biblioteczna4Hermetyzacja
Kontrola dostępuTylko do odczytu z zewnątrzOchrona stanuInicjalizatory, które mogą zawieśćPodsumowanie — konto bankowe7Polimorfizm i typy generyczne
PolimorfizmRzutowanie typówFunkcje generyczneTypy generycznePodsumowanie – kalkulator kształtów2Struktury i typy wartościowe
StrukturySemantyka wartościMetody modyfikująceStruktura czy klasaPodsumowanie – element inwentarza5Dziedziczenie
PodklasyPrzesłanianie metodInicjalizatory i superfinal i hierarchiePodsumowanie — hierarchia pracowników8Standardowe protokoły
CustomStringConvertibleEquatableComparableHashablePodsumowanie — własne sortowanie11Projekt: Zarządzanie biblioteką
Książki i czytelnicyWypożyczanie książekPoćwicz samodzielnie: Edytor online Swift