SwiftyTasks 0.0.1

SwiftyTasks 0.0.1

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布上次发布2016年9月
SPM支持 SPM

Victor Pavlychko 维护。



SwiftyTasks

概述

大多数任务/操作管理库要么从头开始构建任务基础设施,要么专注于定义自定义 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文件。