轻量级的异步串行操作流程控制器。
注意,此描述适用于版本 2.*,该版本是用 Swift 实现的。如果您正在寻找 Objective-C 的实现和文档,请参阅标签/版本 1.0.3。
此库受到了 PromiseKit、Objective-Chain 和 ReactiveCocoa 的启发。
一种用于简单、优雅地管理在后台队列上按 串行 执行的操作流程的工具,具有共享(供所有操作)的错误处理器,在所有操作执行并成功完成后,在主队列上调用完成处理器。
OperationFlow
类实现了基于通用队列的(FIFO)一系列操作,这些操作应依次执行。每个操作都由一个在目标队列上执行的 闭包 表示。您可以添加尽可能多的操作到流程中,但至少有一个操作应利用此类才有意义。每个操作应期望接收到先前操作的 输出 作为 输入 参数。第一个操作没有输入参数,除非在链接第一个操作之前已将流程设置输入值。
任何操作流程都可以提供 最终(完成)闭包,在所有操作完成并成功后将被调用。完成闭包始终在主队列上调用。如果您不需要完成闭包,请随意调用 start()
而不是 finally(...)
。
操作流程还可以配置一个或多个 错误 处理闭包,当流程中的 任何 操作失败时将调用(以错误作为输入参数)。为了表示失败,操作必须抛出 Error
类型的值或符合 Error
类型的值的值。在这种情况下,流程将不会执行下一个操作(以及不会执行最终/完成闭包)。相反,它将逐个执行失败处理器,其顺序与它们被添加的顺序相同,然后无限期地停止执行。失败处理器始终在主队列上调用。
请注意,可能会向流程中添加多个错误处理器。当发生错误时,流程将尝试调用每个失败处理器,前提是期望的错误输入类型与错误值的实际类型相同,或者只是 Error
。
注意:流程中的每个操作也可以称为 步。
以下是使此库与其他库不同的关键特性。
易于使用,语法简洁。每个调用都必须提供最少的参数,以简化使用并提高可读性。
此库不使用代码返回类方法或运行时“魔法”,因此您在 Xcode 中将获得完整的代码补全支持。
目标队列(在该队列中,给定流程的所有操作将依次执行)可以在不与其他流程冲突的情况下为每个流程单独设置。
注意:流程的目标队列将自动设置为全局默认值,因此不需要明确为特定流程设置目标队列。相反,全局默认目标队列将自动设置为一个特定的后台顺序队列。有关更多详细信息,请参阅 FlowDefaults
。
在流程中,每个操作都返回一个值。此值被视为此操作的 结果(输出),并将作为 输入 参数传递给下一个操作。流程中最后一个操作的输出将作为完成闭包的输入参数传递。
为每个操作的输入参数和输出值进行强类型化。这保证了编译时验证操作链(确保链中前一个操作的输出类型与后一个操作的输入参数类型相同)。
每个流程在其主队列上管理其执行,即每个步骤都在目标队列上执行,但流程将前一个操作的输出传递给下一个操作,并通过主队列进行控制。
当流程中的所有操作都已完成 成功 时,将调用完成闭包,并将流程中最后一个操作的输出值作为参数传递。
可以配置每个流程的共享错误处理器(闭包),如果流程中的任何操作指出执行失败,将调用该错误处理器(以错误作为输入参数)。
可以在任何时候取消流动。如果已取消,流程不会强制立即停止当前操作的执行,但不会进行到下一个操作和完成闭包。
只需像这样导入模块 "MKHOperationFlow" 即可
import MKHOperationFlow
请参阅 单元测试 以了解如何使用 OperationFlow
类。
从 版本 3.0 开始,此库支持 Swift 3。为了与 Swift 2.2 和 Swift 2.3 兼容,请使用 较旧版本。