RxSwift:对变量的BehaviorRelay

由于RxSwift,全球许多iOS开发人员都使用了Reactive编程。 而且,如果您也使用它,那么您将习惯于编写Variables

好吧,我最近了解到,这个广受欢迎的BehaviorSubject包装器已经过时了。 此折旧尚处于初期阶段,目前不会发出任何警告。 但是,该路径已经布置好了,并且选择了其后继者: BehaviorRelay

为什么?

根据Krunoslav Zaher的说法,出于许多有关Variables的原因:

它不是标准的跨平台概念,因此在RxSwift目标中不合适。

它没有事件管理的可扩展副本( PublishRelay )。 它仅对状态建模。

它的命名与*Relay不一致

与RxSwift的其他部分相比,它的内存管理模型不一致(在dealloc上完成)

那么这对我们的代码意味着什么呢?

好吧,这:

可变方式

现在变成:

行为中继方式

但是,完成这一迁移是最后一步。 实际上, BehaviorRelay位于RxCocoa中 ,因此需要import

但是,将导入添加到不需要应用程序相关组件的应用程序的低层中似乎有点奇怪。 Zaher先生在此问题中提出了这个问题,并建议“将*RelaySharedSequence提取到自己的框架中”。 整个冒险过程应该在RxSwift的下一个主要版本中结束。

*Relay类是RxSwift 4引入的。与BehaviorSubject不同,该ObservableType不能因错误或完成而终止。 您可以在Minh Vu Nhat的这篇文章中阅读有关它们的更多信息。

到底

我亲自做出了决定,现在,它是Koolicar的iOS行业协会的标准,可以在不延迟编写新代码的情况下使用BehaviorRelay 。 由于已确定弃用,因此我认为使用此全新代码缓慢开始过渡很有用。 同时,我尝试迁移我在任务中可能且安全的情况下遇到的Variables (如果合适)。 这个想法是试图尽可能地平滑过渡。

最后,我不耐烦地等待BehaviorRelay位置的最终答案。 我想从独立于UIKit的实体中删除RxCocoa


2018年9月17日,星期一: RxSwift开发人员昨天发布了其4.3.0“RotWeiß”版本。 自从Playgrounds,示例项目和测试中删除Variable的用法以来,对Variable的弃用一直在进行。