//---书中的代码---
func cancel(_ task: Task?) {
//1.这里写死一个true的参数,是多余的,
//2.如果这里是task?(false) 就是立即执行,从命名上来看,逻辑是不清晰的
task?(true)
}
//----精简版---
typealias CancelTask = () -> ()
func delay(_ time: TimeInterval, task: @escaping ()->()) -> CancelTask {
var isCancelled = false
let cancelTask = {
isCancelled = true;
}
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + time) {
if !isCancelled {
task()
}
}
return cancelTask;
}
书里说到要点,用cancel标识变量,但是,把例子写复杂了