返回 导航

Swift

hangge.com

Swift - 实现代码的延迟执行(附样例)

作者:hangge | 2018-09-19 08:10
有时我们想让一段代码或者一个方法推迟一段时间执行,最简单的就是使用 GCD 提供的延时调用方法来实现。

1,基本用法

(1)下面代码在程序运行后打印出当前时间,然后等待个 5 秒钟再次打印时间。
import UIKit

class ViewController: UIViewController{
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        print("时间1:", Date())
        
        //延迟5秒执行
        DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5) {
            print("时间2:", Date())
        }
    }
}

(2)运行结果如下: 

2,封装一个全局方法

(1)为方便使用,我们还可以封装一个全局的 delay() 方法:
import Foundation

/// 代码延迟运行
///
/// - Parameters:
///   - delayTime: 延时时间。比如:.seconds(5)、.milliseconds(500)
///   - qosClass: 要使用的全局QOS类(默认为 nil,表示主线程)
///   - closure: 延迟运行的代码
public func delay(by delayTime: TimeInterval, qosClass: DispatchQoS.QoSClass? = nil,
                  _ closure: @escaping () -> Void) {
    let dispatchQueue = qosClass != nil ? DispatchQueue.global(qos: qosClass!) : .main
    dispatchQueue.asyncAfter(deadline: DispatchTime.now() + delayTime, execute: closure)
}

(2)下面是使用样例:
//延迟5秒执行(在主线程上)
delay(by: 5) {
    print("时间1:", Date())
}
        
//延迟5秒执行(在全局队列上,且优先级高)
delay(by: 5, qosClass: .userInitiated) {
    print("时间2:", Date())
}
评论

全部评论(0)

回到顶部