倒计时经常在实现获取验证码功能的时候使用,今天在实现注册功能时用到了,就用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里精简了很多,现在项目正忙,等忙完了再来总结一下😃
网友评论