iOS开发Swift

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

有时我们想让一段代码或者一个方法推迟一段时间执行,最简单的就是使用 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())
}