在 SwiftUI 中,可以使用 DispatchQueue.main.asyncAfter 可以在指定的延迟时间后执行特定的任务。
DispatchQueue.main.asyncAfter(deadline: .now() + 2.0) {
print("2 秒后执行")
}
DispatchQueue.main:主线程队列,通常用于更新 UI 或其他与主线程相关的任务。
asyncAfter(deadline:):在指定的时间后异步执行闭包中的代码。
.now() + 2.0:延迟 2 秒后执行。
常见使用场景
1、延迟更新 UI:
DispatchQueue.main.asyncAfter(deadline: .now() + 1.5) {
self.showAlert = true
}
2、模拟网络请求延迟:
func fetchData() {
DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
self.dataLoaded = true
}
}
3、动画延迟:
withAnimation {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
self.showView.toggle()
}
}
注意事项
如果在 background 队列中调用 UI 更新,务必切换回主线程。
如果任务不需要在主线程执行,可以使用 DispatchQueue.global().asyncAfter。
相关文章
Swift管理多线程任务框架GCD:https://fangjunyu.com/2024/11/02/swift%e7%ae%a1%e7%90%86%e5%a4%9a%e7%ba%bf%e7%a8%8b%e4%bb%bb%e5%8a%a1%e6%a1%86%e6%9e%b6gcd/