Swift 中也有类似 Android 中的消息机制和 Handler 的机制,主要通过以下几种方式来实现消息和任务的调度:
1、 Grand Central Dispatch (GCD):
DispatchQueue
来调度任务,例如在主线程上执行任务,或者在后台线程执行任务。2、 OperationQueue:
OperationQueue
提供了一个高层次的接口来管理和调度 Operation
对象。可以创建自己的操作并将其添加到队列中执行。3、 RunLoop:
RunLoop
是一个循环,它会处理事件如输入源、计时器、已放入循环中的任何块。它类似于 Android 中的 Looper
和 Handler
一起使用来管理线程中的消息和任务。// 在主线程上执行任务
DispatchQueue.main.async {
// 这里的代码将在主线程上执行
print("Executing on main thread")
}
// 在后台线程上执行任务
DispatchQueue.global(qos: .background).async {
// 这里的代码将在后台线程上执行
print("Executing on background thread")
}
// 创建一个操作队列
let operationQueue = OperationQueue()
// 创建一个操作
let operation = BlockOperation {
print("Executing operation")
}
// 将操作添加到队列
operationQueue.addOperation(operation)
// 也可以直接将无需封装成 Operation 的任务块添加到 OperationQueue
operationQueue.addOperation {
print("Executing operation block")
}
// 创建一个 Timer 并添加到 RunLoop
let timer = Timer(timeInterval: 1.0, target: self, selector: #selector(timerFired), userInfo: nil, repeats: true)
RunLoop.main.add(timer, forMode: .default)
@objc func timerFired() {
print("Timer fired")
}
假设你有一个网络请求需要在后台执行,并在完成后更新 UI,可以像这样使用 GCD:
// 在后台执行网络请求
DispatchQueue.global(qos: .background).async {
// 模拟网络请求
sleep(2) // 模拟网络延迟
let result = "Network request result"
// 返回主线程更新 UI
DispatchQueue.main.async {
print("Updating UI with result: \(result)")
// 更新 UI 代码,例如:self.label.text = result
}
}
上述代码展示了如何在后台执行任务,并在任务完成后切换回主线程来更新 UI,这类似于 Android 中 Handler 的用法。
通过这些机制,Swift 提供了丰富的工具来处理并发任务和消息传递,满足不同的编程需求。
END
点亮【赞和在看】,让钱和爱都流向你。
心里种花,人生才不会荒芜,如果你也想一起成长,请点个关注吧。