Slide 89
Slide 89 text
schedule(after: now, interval: 1)
の実行前
MyTestScheduler.scheduled
の流れ
s.schedule(after: scheduler.now, interval: 1)
s.advance()
s.advance(.milliseconds(500))
s.advance(.milliseconds(500))
[]
[scheduleAction(for: now), now)]
[scheduleAction(for: now + 1), now + 1)]
[scheduleAction(for: now + 1), now + 1)]
[scheduleAction(for: now + 2), now + 2)]
89
` `
scheduler.schedule(after: scheduler.now, interval: 1) { ... }
final class MyTestScheduler {
func schedule(
after date: SchedulerTimeType,
interval: SchedulerTimeType.Stride,
_ action: @escaping () -> Void,
tolerance _: SchedulerTimeType.Stride,
options _: SchedulerOptions?
) -> Cancellable {
func scheduleAction(for date: SchedulerTimeType) -> () -> Void {
return { [weak self] in
let nextDate = date.advanced(by: interval)
self?.scheduled.append((scheduleAction(for: nextDate), nextDate))
action()
}
}
scheduled.append((scheduleAction(for: date), date))
return AnyCancellable {}
}
}
//
利用コード
let scheduler = DispatchQueue.test