Swift4下使用GCD实现倒计时功能

倒计时经常在实现获取验证码功能的时候使用,今天在实现注册功能时用到了,就用GCD实现了这个方法:

func countdown(count: TimeInterval,
                   event: @escaping (Int) -> (),
                   cancle: @escaping () -> ()){
        
        var timeout = count
        let queue = DispatchQueue.global()//获取全局队列
        let timer = DispatchSource.makeTimerSource(flags: [], queue: queue)//创建计时器
        timer.schedule(deadline: .now(), repeating: .seconds(1), leeway: .microseconds(10))//添加计时任务,马上开始,1秒一次回调,允许极小误差
        //计时器回调
        timer.setEventHandler {
            timeout = timeout - 1
            if timeout <= 0 {
                timer.cancel()
            }
            DispatchQueue.main.async {
                event(Int(timeout))
            }
        }
        //倒计时结束的回调
        timer.setCancelHandler {
            
            DispatchQueue.main.async {
                cancle()
            }
            
        }
        timer.resume()
    }

GCD在Swift4里比OC里精简了很多,现在项目正忙,等忙完了再来总结一下

你可能感兴趣的:(Swift4下使用GCD实现倒计时功能)