//在iOS开发中 有许多工作需要延迟执行,应用场景会有很多,我就不一一举例了
// MARK: - 延时函数
typealias Task = (_ cancel : Bool) -> ()
@discardableResult
func delay(_ time:TimeInterval, task:@escaping () -> ()) -> Task? {
func dispatch_later(_ block:@escaping () -> ()) {
DispatchQueue.main.asyncAfter(
deadline: DispatchTime.now() + Double(Int64(time * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC),
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)
}
//调用
delay(0.1, task: {
//你的代码
})
cancel(task: {
})