swifter-tips / Public-Issues

Public issues for Swifter-tips book
103 stars 3 forks source link

[GCD 和延时调用]里例子不够精简的小建议 #83

Open copewang opened 6 years ago

copewang commented 6 years ago

书里说到要点,用cancel标识变量,但是,把例子写复杂了

//---书中的代码---
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;
}