// GCD 和延時(shí)調(diào)用
DispatchQueue.global().async {
print("耗時(shí)的肆饶。驮俗。。努力工作")
//
DispatchQueue.main.async {
print("結(jié)束工作,更新 UI")
}
}
/*
要實(shí)現(xiàn)以下功能
delay(2){
print("2秒輸出")
}
想取消的話涛舍,保留一個(gè) task 的引用,然后調(diào)用 cancel
let task = delay(5) {
print("撥打110")
}
仔細(xì)想了想唆途,還是取消為妙
cancel(task)
*/
typealias Task = (_ cancel: Bool) -> Void
// 延時(shí)執(zhí)行一個(gè)block富雅, 返回這個(gè)一個(gè)可以取消的block
func delay(_ time : TimeInterval, task:@escaping()->()) -> Task? {
func dispatch_later(block: @escaping()->()){
let t = DispatchTime.now() + time
DispatchQueue.main.asyncAfter(deadline: t, execute: block)
}
var closure:(()->Void)? = task
var result : Task?
let delayedClosure: Task = {
cancel in
if let internalClosure = closure {
if cancel == false {
DispatchQueue.main.async(execute: internalClosure)
}
}
closure = nil
result = nil
}
result = delayedClosure
dispatch_later {
if let delayedClosure = result {
delayedClosure(false)
}
}
return result
}
func cancel(_ task: Task?){
task?(true)
}
let task = delay(5) {
print("撥打110")
}
cancel(task)