TDOuroboros 是一个用 Swift 编写的异步任务链库。
为什么选择 TDOuroboros
TDOuroboros 是一个用 Swift 编写的 iOS 库,它提供了连接异步任务的能力,如动画任务、HTTP 请求任务等。
传统上,可以通过嵌套完成处理程序来连接异步任务,如下所示
import UIKit
UIView.animate(withDuration: 1.0, animations: {
// Perform animation 1
}) { (result1) in
UIView.animate(withDuration: 1.0, animations: {
// Perform animation 2
}, completion: { (result2) in
UIView.animate(withDuration: 1.0, animations: {
// Perform animation 3
}, completion: { (result3) in
print("Animation 1-3 executed");
})
})
}
这种方法有两个主要缺陷
- 灾难性的金字塔
- 无法处理运行时生成的任务
TDOuroboros 处理任务的方式非常不同
首先创建一个任务队列,以便保持和管理异步任务。每当生成或定义一个新的任务时,它应被排队到最初创建的任务队列中。每个任务完成之后,它应通知任务队列某个任务已经完成。任务队列将出列一个新任务并执行它。
例如
本仓库中包含一个示例 iOS 项目,位于子文件夹 Example 中。
每当通过拖放重新排列形状列表时,每个形状的动画任务将按从左到右的列表顺序入队到共享任务队列实例中。之后,每个形状的动画将按顺序执行。
使用方法
使用共享任务队列实例
如果您只需要为一个应用或框架创建一个任务队列,或者您希望有一个可以在应用程序任何地方使用的共享任务队列。您可以使用共享的任务队列管理实例。
import TDOuroboros
import UIKit
// Enqueue a new task into the shared task queue manager instance
TDTaskQueueManager.shared.enqueue { [weak self] in
// Task code here
UIView.animate(withDuration: 1.0, animations: {
print("Hello World")
}, completion: { (result) in
if (result) {
// After task finished, notify task queue manager about task completed
TDTaskQueueManager.shared.taskCompleted()
}
})
}
创建自己的任务队列
您始终可以创建自己的任务队列管理实例,一个应用/框架中可以共存多个队列实例。
import TDOuroboros
import UIKit
// Create new task queue manager instance
let taskQueue = TDTaskQueueManager()
// Enqueue a new task into the queue
taskQueue.enqueue { [weak self] in
// Task code here
UIView.animate(withDuration: 1.0, animations: {
print("Hello World")
}, completion: { (result) in
if (result) {
// After task finished, notify task queue manager about task completed
self?.taskQueue.taskCompleted()
}
})
}
安装
TDOuroboros可以通过CocoaPods获取。要安装它,只需将以下行添加到Podfile中。
pod 'TDOuroboros'
关于
我们热爱Pull Requests,欢迎加入我们的项目!
许可证
TDOuroboros遵循MIT许可证。更多信息请查阅LICENSE文件。