[Swift]代碼延遲執行

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-ezvednmj-ke.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

使用 GCD 提供的延時調用方法來實現:git

1 import UIKit
2 
3 print("當前時間:", Date())
4 //延遲3秒執行
5 DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
6     print("3秒後執行時間:", Date())
7 }

封裝一個全局的 delay() 方法:github

 1 import UIKit
 2 
 3 //delayTime:延時時間。好比:.seconds(3)、.milliseconds(300)
 4 //qosClass: 使用的全局QOS類(默認爲 nil,表示主線程)
 5 //closure: 延遲運行的代碼
 6 public func delay(by delayTime: TimeInterval, qosClass: DispatchQoS.QoSClass? = nil,
 7                   _ closure: @escaping () -> Void) {
 8     let dispatchQueue = qosClass != nil ? DispatchQueue.global(qos: qosClass!) : .main
 9     dispatchQueue.asyncAfter(deadline: DispatchTime.now() + delayTime, execute: closure)
10 }

示例:api

1 //延遲3秒執行(在主線程上)
2 delay(by: 3) {
3     print("當前時間:", Date())
4 }
5          
6 //延遲3秒執行(在全局隊列上優先級高)
7 delay(by: 3, qosClass: .userInitiated) {
8     print("3秒後執行時間:", Date())
9 }
相關文章
相關標籤/搜索