Swift GCD封装

swift GCD 封装:喵神

虽然自己理解的一般,但是喵神已经写好封装,以后自己好好理解,感谢喵神~

import Foundation

typealias Task = (cancel : Bool) -> ()

func delay(time:NSTimeInterval, task:()->()) ->  Task? {

func dispatch_later(block:()->()) {

dispatch_after(

dispatch_time(

DISPATCH_TIME_NOW,

Int64(time * Double(NSEC_PER_SEC))),

dispatch_get_main_queue(),

block)

}

var closure: dispatch_block_t? = task

var result: Task?

let delayedClosure: Task = {

cancel in

if let internalClosure = closure {

if (cancel == false) {

dispatch_async(dispatch_get_main_queue(), internalClosure);

}

}

closure = nil

result = nil

}

result = delayedClosure

dispatch_later {

if let delayedClosure = result {

delayedClosure(cancel: false)

}

}

return result;

}

func cancel(task:Task?) {

task?(cancel: true)

}

你可能感兴趣的:(Swift GCD封装)