大多数任务/操作管理库要么从头开始构建任务基础设施,要么专注于定义自定义 Operation
子类。
SwiftyTask 的目标是在现有的 Operation
基础设施上方构建工作流程,并使用结果/错误处理对其进行扩展。任何第三方 Operation
子类都可以轻松地扩展来支持 TaskProtocol
并参与复杂的工作流程。
SwiftyTasks 定义了以下与任务相关的协议:
AnyTask
:提供支持任务列表,由 Operation
类采纳TaskProtocol
:扩展 AnyTask
,提供对执行结果的访问库还定义了以下与任务相关的类:
Task<ResultType>
:基类,符合 TaskProtocol
,提供结果处理BlockTask<ResultType>
:子类,用于将任何代码块包装为 Task
AsyncTask<ResultType>
:扩展 Task
类,以处理异步 Operation
状态AsyncBlockTask<ResultType>
:子类,用于将任何异步代码块包装为 AsyncTask
AdapterTask<ResultType>
:子类,用于包装操作自定义结果块的列表以下算子被定义来管理任务:
+=
:在 OperationQueue 中排队任务<~
:执行部分函数应用,其中右侧操作数可以是值或任务~>
:对右侧的值/任务列表进行延迟函数调用~~
:将右侧的任务添加为左侧任务的依赖项Task
工作流程围绕着部分应用和返回 Task
的函数。
使用 <~
算子执行部分应用。左侧的函数将被包裹进一个在右侧值准备好后执行的任务中。
使用 ~>
算子转换值列表。右侧的函数将被包裹进一个在所有左侧值都准备好后执行的任务中。
最后,+=
算子被重载,用于将任务排队到 OperationQueue
中
以下是一个示例,说明如何在实际场景中创建视频,将其保存到相册并将视频上传到相册文件夹。
let createVideoOperation = OperationQueue.main
+= CreateVideoOperation()
let createVideoAssetOperation = OperationQueue.main
+= CreateVideoAssetOperation.init(videoURL:)
<~ createVideoOperation
let createAssetCollectionOperation = OperationQueue.main
+= CreateAssetCollectionOperation.init(title:)
<~ "Convenience"
let addAssetToCollectionOperation = OperationQueue.main
+= AddAssetToCollectionOperation.init(asset:collection:)
<~ createVideoAssetOperation
<~ createAssetCollectionOperation
addAssetToCollectionOperation.completionBlock = {
completionBlock()
}
SwiftyTasks可通过CocoaPods获取。要安装,只需将以下行添加到您的Podfile中
pod "SwiftyTasks"
Victor Pavlychko,[email protected]
SwiftyTasks可在MIT许可证下使用。有关更多信息,请参阅LICENSE文件。