Swift -- delay(封装一个延迟执行的方法)

//在iOS开发中 有许多工作需要延迟执行,应用场景会有很多,我就不一一举例了

// MARK: - 延时函数
typealias Task = (_ cancel : Bool) -> ()

@discardableResult

func delay(_ time:TimeInterval, task:@escaping () -> ()) -> Task? {
    
    
    func dispatch_later(_ block:@escaping () -> ()) {
    
    
        DispatchQueue.main.asyncAfter(
            deadline: DispatchTime.now() + Double(Int64(time * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC),
            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(0.1, task: {
    
    
//你的代码
})

cancel(task: {
    
    

})

猜你喜欢

转载自blog.csdn.net/SoftwareDoger/article/details/106443881