Rx Swift5更新

2021-02-19 21:31

阅读:1259

标签:形式   多少   text   调整   target   情况   nil   重载   subject   

  • RxSwift 5 更新了什么?

RxRelay 现在是一个独立的框架

RxRelay 是一个在 Subjects 之上很好的抽象层。它可以让我们发出元素,而不用担心 error 和 completed 这样的终止事件。由于它们被添加到 RxSwift 中,并且是 RxCocoa 项目的一部分。

许多开发者对此很不乐意。因为他们如果要使用 Relays 就必须引入 RxCocoa,即便他们编写的代码与 RxCocoa 没有任何关系。这其实是很不合理的。并且这样一来 Linux 用户就无法使用 Relays,因为 Linux 无法导入 RxCocoa。

由于上述原因,将 Relays 拆分成一个独立的框架 - RxRelay -- 并且调整 RxSwift 的依赖图

  • TimeInterval → DispatchTimeInterval

RxSwift 5 中重构了 Schedulers,弃用了 TimeInterval,转而使用 DispatchTimeInterval。这样就与底层时间 API 保持一致,不会丢失精度。

他会影响到所有基于时间的操作符,如:debounce,timeout,delay,take 等等。作为额外的收获,他还解决了 take 入参的歧义,因为之前无法判断参数代表多少秒,还是多少个。

  • Variable 最终被弃用了

Variable 是早期添加到 RxSwift 的概念,通过 “setting” 和 “getting” 他可以帮助我们,从原先命令式的思维方式,过渡到“响应式的思维方式”。

这种做法被证实是有问题的,许多开发者滥用 Variable, 来构建 重度命令式 系统,而不是 Rx 的 声明式 系统。这对于新手非常常见,并且让他们无法意识到,这是代码的坏味道。所以在 RxSwift 4.x 中 Variable 被轻度弃用,仅仅给出一个运行时警告。

在 RxSwift 5.x 中,他被官方的正式的弃用了,并且在需要时,推荐使用 BehaviorRelay 或者 BehaviorSubject。

技术图片

技术图片

补充 do(on:) 重载方法

do 是一个很棒的操作符,当你想添加一些附加作用,如:打印日志。

为了与 RxJava 对齐,RxSwift 现在不仅提供 do(onNext:),而且还提供 after 重载方法,例如:do(afterNext:)。onNext 代表元素发送了,但未被转发到下游。而 afterNext 代表元素发送了,并已经被转发到下游。

技术图片

bind(to:) 现在支持多个观察者

在一些情况下,你不得不将流绑定到多个观察者上。在 RxSwift 4 中,你通常需要重复绑定代码:

技术图片

新增 compactMap 操作符

作为开发者,你通常要处理可选型。为了将它拆包,社区有专门的解决办法。例如: RxSwiftExt 的 unwrap 操作符,或者 RxOptional 的 filterNil 操作符。

RxSwift 5 新增了一个新的操作符 compactMap,从而对齐了 Swift 标准库,将这种功能带入到核心库。

技术图片

技术图片

toArray() 现在返回 Single

toArray() 操作符将所有的元素以数组的形式发送出去,在流完成时。

自从 RxSwift 诞生以来,这个操作符一直都是返回 Observable,但是在特征序列被引入以后,尤其是 Single。将返回类型改为 Single 会更加合适,这不仅提供了类型安全,并且还保证该操作符只会发出一个元素。

技术图片

更新范型约束名称

RxSwift 是范型约束的重度使用者。早些时期,他使用单个字母来表示某个类型。例如,ObservableType.E 代表 Observable 的元素。

这是可行的,但是有时候会造成混淆,如 O, 既可以代表 Observable,也可以代表 Observer。他们的首字母都是 O。另外 S 既可以代表 Subject, 也可以代表 Sequence。

此外,这些单字母约束并不能提供良好的“自解释”代码,并使得项目贡献者以外的人,难以理解他们的含义。

出于这些原因,我们对私有和公共接口的大多数通用约束进行了全面修改,使其更清晰和详细。

影响最大的重命名是将 E 和 ElementType 改为 Element。

技术图片

这次重命名的范围广泛。下面有一个完整的清单。大多数都是内部 API,只有少数与我们这些开发者相关:

  • E 和 ElementType 改为 Element。
  • TraitType 改为 Trait。
  • SharedSequence.S 改为 SharedSequence.SharingStrategy。
  • O 改为 Observer 和 Source,仅在适用的情况下。
  • C 和 S 分别被改为 Collection 和 Sequence。
  • S 改为 Subject,仅在适用的情况下。
  • R 改为 Result。
  • ReactiveCompatible.CompatibleType 改为 ReactiveCompatible.ReactiveBase。

Rx Swift5更新

标签:形式   多少   text   调整   target   情况   nil   重载   subject   

原文地址:https://www.cnblogs.com/liuxiaokun/p/12683805.html


评论


亲,登录后才可以留言!