GCD package (Swift) by Wusheying
OverridefuncViewdidload () {
Delay(2) {
println("2s later")
}
Lettask =Delay(5) {
println("Call")
}
Cancel(Task)
}
TypealiasTask = (Cancel:Bool) ()
funcDelay (Time:Nstimeinterval, Task: (), ())Task? {
funcDispatch_later (Block: ()) {
Dispatch_after(
Dispatch_time(
Dispatch_time_now,
Int64(Time *Double(nsec_per_sec))),
Dispatch_get_main_queue(),
Block
}
varClosure:dispatch_block_t? = Task
varResult:Task?
Letdelayedclosure:Task = {
Cancelinch
if LetInternalclosure = closure {
if(Cancel = =false) {
Dispatch_async(Dispatch_get_main_queue(), internalclosure);
}
}
Closure =Nil
result =Nil
}
result = Delayedclosure
Dispatch_later {
if LetDelayedclosure = result {
Delayedclosure (Cancel:false)
}
}
returnresult;
}
funcCancel (Task:Task?) {
Task? (Cancel:true)}
Copyright NOTICE: This article for Bo Master original article, without Bo Master permission not reproduced.
GCD Package (Swift)