let time: TimeInterval = 1.0
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + time) {
? ? //code? ??
? ? print("1 秒后輸出")
}
以下來自喵神
import Foundation
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)?
}
/*****使用*****/
//調(diào)用
delay(2) {
print("2 秒后輸出")
}
//取消
let task = delay(5) {
print("撥打 110")
}
// 仔細(xì)想一想..// 還是取消為妙..
cancel(task)