可取消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
网友评论