美文网首页
可取消DispathAfter

可取消DispathAfter

作者: 吃货_X | 来源:发表于2020-08-28 11:22 被阅读0次
typealias DispathAfterTask = (_ cancle : Bool) -> Void

func DispathAfter(_ time: TimeInterval, task: @escaping() -> ()) -> DispathAfterTask? {
    
    func dispatch_later(block: @escaping()->()) {
        let t = DispatchTime.now() + time
        DispatchQueue.main.asyncAfter(deadline: t, execute: block)
    }
    
    var closure : (() -> Void)? = task
    var result : DispathAfterTask?
    
    let delayedClosure : DispathAfterTask = {
        cancle in
        if let internalClosure = closure {
            if cancle == false {
                DispatchQueue.main.async(execute: internalClosure)
            }
        }
        closure = nil
        result = nil
    }
    
    result = delayedClosure
    
    dispatch_later {
        if let delayedClosure = result {
            delayedClosure(false)
        }
    }
    
    return result
}

func DispathAfterCancel(_ task: DispathAfterTask?) {
    task?(true)
}

相关文章

网友评论

      本文标题:可取消DispathAfter

      本文链接:https://www.haomeiwen.com/subject/xkxlsktx.html