Menu
CoddyTech

活动日程安排

本课属于 Coddy Swift 学习旅程的“面向对象编程”单元。第 56 课,共 57 课。

challenge icon

挑战

困难

使用标准协议构建一个事件调度器。Event 是一个结构体,包含 title、day(1-31)、start 和 end 小时。它遵循 Comparable(依次按日期、开始时间和标题排序)、Hashable,并且仅按标题和日期遵循 Equatable(同一个事件被输入两次),还遵循 CustomStringConvertible,格式为 day 3 09-11 standup。Scheduler 类有一个 add(_:) 方法,它会返回 added、duplicate(同一天有相同标题),或 conflicts with <title>(当天已有事件与之时间重叠:一个事件的开始时间早于另一个事件的结束时间)。agenda() 会返回排序后的事件,busiestDay() 会返回 busiest day 3: 5h 或 no events。

提供的代码会按 title,day,start,end 格式读取事件,每行一个,并打印每个事件的回复,然后打印日程表(每行一个事件)和最忙碌的一天。

你的代码写在 Event.swift 和 Scheduler.swift 中。main.swift 包含提供的输入/输出代码,不能编辑。

亲手试试

// 提供的输入/输出代码:保持原样。
var input: [String] = []
while let line = readLine() { input.append(line) }
let scheduler = Scheduler()
for line in input {
    let p = line.split(separator: ",").map(String.init)
    print(scheduler.add(Event(title: p[0], day: Int(p[1])!, start: Int(p[2])!, end: Int(p[3])!)))
}
for e in scheduler.agenda() { print(e) }
print(scheduler.busiestDay())

面向对象编程中的所有课

自己练习: Swift 在线编辑器