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