RxStream
简单的 Swift 中的 React
RxStream 是一种更简单的 Swift 反应式框架,寻求与现有语言和架构范式良好集成,而不是取代它们。
如果你在寻找完整的反应式框架,你可能最好查看 RxSwift 或 ReactiveCocoa。与这些框架相比,RxStream 是 React 的一个更简化的版本。这样做的原因是多方面的
- 使用更简单的范式,学习曲线大大缩短。更容易让其他开发人员投资于使用它。
- RxStream 试图摆脱大多数反应式框架中固有的许多复杂语法的某些部分。这可以帮助创建更易读和可维护的代码。
- 与许多 React 的大力支持者主张它作为许多现有架构和软件解决方案的替代品不同,RxStream 主要是作为你已使用的范式的一个补充而设计的。它旨在增强和集成到 Swift 的固有语言特性中,而不是忽略或取代它们。根据需要使用或大量使用 RxStream。它不会妨碍你。
概述
注意:如果你对 React 还不了解,你可能想看看 ReactiveX 上的反应式介绍。这将帮助你掌握 React 的核心原理。但是,它们使用的某些术语可能与 RxStream 的不同。
RxStream围绕值转换流的概念运行。如果您熟悉ReactiveX,那么它们的Observable<T>
与RxStream的Stream<T>
非常相似。所有流都有多种相关的操作,用于观察和转换流中的值。然而,在RxStream中,创建和返回的流类型之间存在一个非常清晰的区分。这消除了对流是什么、如何操作以及客户端可以对此期望什么的不确定性。
- 热流:热流是一种产生值时无关或不受其客户端影响的流。当客户端在热流上注册操作时,它将与它们到来时一样接收值。
- 冷流:只有当客户端发出一个
Request
时,冷流才会产生值。与其他所有流不同,冷流有两种类型:Request
和Response
。客户端向冷流发出一个Request
并从冷流接收一个Response
。 - 未来值:未来值是只产生一个值然后关闭的流。
- 进度:进度是一种特殊的未来值,它报告任务进度。它允许客户端观察进度并对其作出反应,以及最终的输出。
- 承诺:这是一种未来值的类型,它只产生一个值,但它的客户端可以取消并重试,直到它产生一个错误或有效的值。
- 可观察对象:可观察对象是一种热流,其值是可保证的,并且可以在流外直接观察和访问。
- 定时器:这是一个具体的Hot流,它在预定义的时间间隔内重复发出事件。虽然您可以通过创建一个
HotTask
来自定义定时器,但是由于Foundation.Timer
的保留行为,这样做可能会很棘手,因为它可能导致保留周期。因此,创建了一个Rx.Timer
,以提供更简单的方法。
热和可观察流有用于产生值的子类。而冷、承诺和未来值流只能通过一个任务(产生值)进行初始化。
特 性
RxStream具有几个特性,可以帮助您轻松管理和使用它们。
- 分发:所有流都可以在指定的分发(在内部使用GCD)上执行操作。这允许您轻松地将操作执行在主队列、后台队列或您创建的自定义队列上。
- 节流:节流允许您控制通过流传递的数据流。其中最有用的是压力节流,它将缓冲处理并防止过多值基于当前工作负载被处理。
- 销毁:不同于使用单独的对象来销毁处理链,RxStream 允许您在处理链的内部直观且具体地销毁流。当流中的任何部分终止时,整个分支将被修剪。此外,您可以通过使用显式的
doWhile
或until
操作符或甚至将分支的寿命与特定对象绑定,轻松指定何时终止一个分支。 - 重放:流可以被重放,这将在从现有流创建一个新的处理链时,拉取流上最后一个值(如果有)。只需在处理链的末尾调用
replay()
,如果可用,它将被拉入处理链。默认情况下,Future 和 Promise 流会自动将完成值重放入任何新的处理链。 - 操作:每个流都提供了一系列可用于处理数据的操作。然而,我们避免了更复杂的操作符,特别是那些生成或处理包含其他流的流的操作符。这是 RxStream 与其他响应式框架的主要区别。
- 清晰的终止符:每个流都是以清晰的语言终止的,由枚举定义
case .cancelled
:该流已被取消。case .completed
:该流已完成。case .error(Error)
:流终止时出现错误。
- 非终止错误:除了普通值外,非终止错误也可以推入流中并进行观察。这些错误可以转换为下游的终止错误。
- 构建:在流上构建处理链是订阅的过程。没有必要手动调用
subscribe
来开始接收值。开发者在没有实际使用的情况下构建一个链的情况很少见,因此,我们不强制您调用subscribe
,相反,如果您 不想 接收值,请使用filter
过滤它们,直到您准备好。 - 调试:RxStream 有几个功能使调试更简单,包括在单个流和全局空间上的描述性的
debugDescription
和自定义调试日志处理器。
需求
- Swift 4.0
- XCode 9.0
- iOS 8.1+ | MacOS 10.10+ | tvOS 9.0+ | watchOS 2.0+
- 注意:对于 Swift 3 项目,您可以使用版本 1.x 或 Swift 3 分支。
联系
- 问题和错误:请在 GitHub 上提交问题。
- 功能请求:请在 GitHub 上提交问题。
- 联系我: [email protected]
- 博客: Functional Gibberish