Menu
Coddy logo textTech

סיכום – היררכיית עובדים

חלק מהיחידה תכנות מונחה עצמים במסלול ה-Swift של Coddy. שיעור 26 מתוך 57.

challenge icon

אתגר

קשה

בנו מדריך עובדים. 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()) }

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: Swift אונליין