Repaso: jerarquía de empleados
Parte de la sección Programación orientada a objetos del Journey de Swift de Coddy. Lección 26 de 57.
Desafío
DifícilConstruye un directorio de personal. Person almacena name y tiene role(), que devuelve person, y card(), que devuelve Ada (person), construido a partir de role(). Staff: Person añade department, establecido en su propio inicializador antes de super.init, y sobrescribe role() para devolver staff in <department>. Manager: Staff añade team (un array de Staff, vacío al principio), un método hire(_:), y sobrescribe role() para devolver el rol de Staff seguido de , 2 reports. Contractor: Person es final, añade days y sobrescribe role() para devolver contractor for 30 days.
El código proporcionado lee líneas staff,name,dept, manager,name,dept, contractor,name,days y hire,manager,staff (el gerente contrata a un miembro del personal por su nombre). Imprime card() para cada persona en el orden en que se crearon.
Tu código va en Person.swift, Staff.swift, Manager.swift y Contractor.swift. main.swift contiene el código proporcionado de entrada/salida y no se puede editar.
Pruébalo tú mismo
// Código de entrada/salida suministrado: déjalo tal como está
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()) }
Todas las lecciones de Programación orientada a objetos
1Clases y objetos
Trabajar con archivosDefinir clasesMétodos y selfInicializadoresLas clases son referenciasRepaso: tarjeta de biblioteca4Encapsulación
Control de accesoSolo lectura desde fueraProtección del estadoInicializadores que pueden fallarRepaso - Cuenta bancaria7Polimorfismo y genéricos
PolimorfismoConversión de tiposFunciones genéricasTipos genéricosRepaso - Calculadora de formas2Structs y tipos por valor
StructsSemántica de valoresMétodos mutablesStruct o claseRepaso - elemento del inventario5Herencia
SubclasesSobrescritura de métodosInicializadores y superfinal y jerarquíasRepaso: jerarquía de empleados8Protocolos estándar
CustomStringConvertibleEquatableComparableHashableRepaso - Ordenamiento personalizado11Proyecto: Gestión de bibliotecas
Libros y miembrosPréstamo de librosPractica por tu cuenta: Playground de Swift