美文网首页
swift3.0延时操作

swift3.0延时操作

作者: JustLee__ | 来源:发表于2017-02-06 10:56 被阅读35次

在实际编程过程中经常需要一个延时操作的功能,下面进行一个延时2s的操作

非封装写法

DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) { 
      //your code
 }

简单封装

  • 代码
public func delayWithTime(_ time: TimeInterval, work: @escaping () -> ()){
    
    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + time, execute: work)
}
  • 用法
delayWithTime(3) { 
    //your code
}

进一步封装

  • 代码
public typealias CancelableTask = ( _ cancel: Bool) -> Void

public func delay( _ time: TimeInterval, work: @escaping () -> ()) -> CancelableTask?{
    
    var finalTask: CancelableTask?
    
    let cancelableTask: CancelableTask = { cancle in
        if cancle {
            finalTask = nil
        } else {
            DispatchQueue.main.async(execute: work)
        }
    }
    
    finalTask = cancelableTask
    
    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + time) {
        if let task = finalTask {
            task(false)
        }
    }
    
    return finalTask
}

public func cancel(_ cancelableTask: CancelableTask?) {
    
    cancelableTask?(true)
}
  • 用法
 //延时操作
 let task = delay(3) {
      //your code
 }
//取消延时
delay(1.5) { 
     cancel(task)
 }

相关文章

  • swift3.0延时操作

    在实际编程过程中经常需要一个延时操作的功能,下面进行一个延时2s的操作 非封装写法 简单封装 代码 用法 进一步封...

  • Swift3.0 延时操作 dispatchAfter

    DispatchQueue.main.asyncAfter(deadline:DispatchTime.now()...

  • Kafka时间轮算法

    1 背景 Kafka存在大量的延时操作,比如延时生产、延时消费或者延时删除,实现延时操作有很多办法,JDK的Tim...

  • 延时操作

    延时操作

  • Swift3.0 延时执行

    //延时1s执行 DispatchQueue.main.asyncAfter(deadline: Dispatch...

  • swift3.0 延时执行

    let time: TimeInterval = 1.0 DispatchQueue.main.asyncAfte...

  • 延时操作

    在开发过程中,我们经常会遇到延迟操作,例如在网络请求成功后,自动返回前一页,如果请求完成马上返回,会很快,体验很不...

  • 延时操作

  • 延时操作

    延时操作 NSEC_PER_MSEC:毫秒NSEC_PER_SEC:秒dispatch_after(dispatc...

  • 延时操作

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)...

网友评论

      本文标题:swift3.0延时操作

      本文链接:https://www.haomeiwen.com/subject/mzpyittx.html