복습 - 직원 계층 구조
Coddy Swift 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 57개 중 26번째.
챌린지
어려움직원 디렉터리를 만드세요. Person은 name을 저장하며, person을 반환하는 role()과 role()을 기반으로 만든 Ada (person)을 반환하는 card()를 가집니다. 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 플레이그라운드