Menu
Coddy logo textTech

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.

challenge icon

Desafío

Difícil

Construye 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

Practica por tu cuenta: Playground de Swift