【学习资料】iOS响应式编程:ReactiveCocoa vs RxSwift
发布时间:2016年03月02日 16:25分 来源:博为峰教育网采编 关键词:iOS响应式编程 | 上一篇 | 下一篇 |
三 : Schedulers
这个部分两个框架都很类似,同样的概念。但是RAC是连续的,串行,Rx可以支持并发。
四:Composition
合成(Composition)是响应式编程的主要特点。合成成流都是两个框架的核心,在Rx中也称作sequences。
在Rx中所有observable的实体的类型都是Observable Type,所以我们可以轻松的用同一个操作符将 Subject 和 Observable 的实例组合(compose)起来。在RAC中,Signal和Signal Producer是两种不同的对象。我们必须把Signal Producer转换成Signal后才能compose由Signal实例产生的信号。这两个对象拥有各自的操作符。所以当需要混合使用它们时,你必须考虑到某种操作符是否是两者通用,这个时候你也不必关心冷/热的处理了。
现在signal的API主要关注在处理‘next’上,让你可以改变值,skip、delay、combine并且在不同的线程里观察值。signal producer 的 API 主要处理信号的生命周期事件(completed, error),和一些这样的操作:then, flat Map, takeUntil 和catch。
其他
在RAC中还有Action和 Property的概念。前者是一种处理副作用的类型,主要和用户交互相关。后者用于观察当执行了一个任务后值改变了的情况。在Rx中Action也会转变(translate)成一个 Observable类型。这在RxCocoa中有很好的体现,一个集成了Rx基本元素后用于iOS 和 Mac 平台。RAC中的 Property可以对应于 Rx 中的 Variable 或者 Behaviour Subject。
明白 Property/ Variable是我们连接必然世界和声明本质的响应式编程的的桥梁(bridge the imperative world to the declarative nature of Reactive Programming),所以当我们处理一些第三方库或者iOS/Mac中的核心功能(functionalities)时, Property/Variable有时是基础。
结论
RAC和Rx可以说是两种完全不同的物种,前者在Cocoa里有着长的历史和大量的参与者,后者很年轻,但是依靠着已经在其他语言里像java、js或者C# 被验证过的有效理念。关于选谁比较好还是要考虑到自己的情况。RAC认为把观察的对象区分为热/冷是非常有必要的,并且这也是他们框架的一个核心特点。Rx则认为把这个统一为一种对象更好。再次说明,这影响的只是怎么处理订阅后的副作用。
RAC 3.0 在为了区分观察时的热/冷状态还引入了意料之外的复杂度,比如中断的概念,区分两种对象间不同的操作,引入一些必要行为(imperative behaviour)比如start是开始产生信号。对于一些人来说,这些东西很好甚至是一个杀手级功能,对于另外一些人而言会觉得这个并没有必要甚至有些危险。另外需要记住的一点是RAC一直努力和Cocoa的惯例尽量保持一致,如果你是一个资深的Cocoa开发者,你在使用RAC应该会觉得比Rx更顺手。
Rx中所有的对象都是observables。好的一件事是,是Reactive Extensions中的一员。从RxJS, RxJava 或者 Rx.Net中迁移过来是一件非常简单的事,所有概念都是一样的。这也让解决问题时会很有趣,因为你现在面临的问题,可能在RxJava中已经有人写过解决方案,你可以直接拿过来按照当前平台实现就可以。
这两个应该选哪一个关键看使用习惯,从一个客观的角度来说无法分辨出谁更好。最好的方式是打开Xcode,都试着使用这两个框架,看看那个用起来比较顺手。他们都是相同iOS响应式编程理念的实现,尝试达到同一个目的:使开发软件变得简单(simplifying software development)。
【文章摘自互联网】