学习Swift中的小事情之-延时执行任务或者取消任务
//: Playground - noun: a place where people can play
import UIKit
typealias Task = (_ cancel:Bool) -> Void
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("执行函数")}
cancel(task)
//MARK:使用系统提供的函数
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
print("三秒后打印")
}