Menu
CoddyTech

Rekap: Hierarki Karyawan

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan Swift di Coddy. Pelajaran 26 dari 57.

challenge icon

Tantangan

Sulit

Buat direktori staf. Person menyimpan name dan memiliki role() yang mengembalikan person, serta card() yang mengembalikan Ada (person), yang dibuat dari role(). Staff: Person menambahkan department, yang diatur dalam initializer-nya sendiri sebelum super.init, dan meng-override role() agar mengembalikan staff in <department>. Manager: Staff menambahkan team (sebuah array berisi Staff, yang awalnya kosong), sebuah method hire(_:), dan meng-override role() agar mengembalikan role Staff yang diikuti , 2 reports. Contractor: Person bersifat final, menambahkan days, dan meng-override role() agar mengembalikan contractor for 30 days.

Kode yang disediakan membaca baris staff,name,dept, manager,name,dept, contractor,name,days, dan hire,manager,staff (manager merekrut anggota staf berdasarkan nama). Kode mencetak card() untuk setiap orang sesuai urutan pembuatannya.

Tulis kodemu di Person.swift, Staff.swift, Manager.swift, dan Contractor.swift. main.swift berisi kode input/output yang disediakan dan tidak boleh diedit.

Coba sendiri

// Kode input/output yang disediakan: biarkan apa adanya
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()) }

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Playground Swift