延迟执行

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) 

}

/*****使用*****/

//调用

delay(2) {

print("2 秒后输出")

}

//取消

let task = delay(5) {

print("拨打 110")

}

// 仔细想一想..// 还是取消为妙..

cancel(task)

你可能感兴趣的:(延迟执行)