Swift 延迟运行代码

//
//  DelayRun.swift
//  
//  Created by XuQing on 16/7/1.
//  Copyright © 2016年 xuqing. All rights reserved.
//


import Foundation

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

func DelayRun(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)
}
原文地址:https://www.cnblogs.com/yesicoo/p/Swift-yan-chi-yun-xing-dai-ma.html