简介
如今,函数响应式编程成为越来越受开发者喜欢的编程方法。原因很简单,它能使复杂的异步代码容易地编写和理解,以及 MVVM 设计模式的兴起。目前的两个 iOS 最流行的函数响应式编程库分别是 ReactiveCocoa 与 RxSwift。
ReactiveCocoa
ReactiveCocoa 是一个比较老的开源项目,从 Objective-C 时期开始,后来从 3.0 开始支持了 Swift (可以通过 bridge 在 Objective-C 下使用),接着就完全停止了在 Objective-C 上的维护,到了 5.0 更是将 RAC 拆分为四个库:ReactiveCocoa、ReactiveSwift、ReactiveObjC、ReactiveObjCBridge,用于区分 Objective-C 和 Swift 开发。之前我总结过一篇 ReactiveCocoa 入门 的文章,里面简单介绍了下 ReactiveCocoa 的组织框架,这里就不详细介绍了。
推荐阅读汇总:干货集结地
RxSwift
RxSwift 项目的时间短一些,但是 ReactiveX 社区充满了活力。关于 RxSwift 有一件重要的事是项目是按照 ReactiveX 这个组织的规定下开发的,并且所有其他语言的 Rx 项目也是一样。如果学会了如何使用 RxSwift,再去学习 Rx.Net , RxJava 或者 RxJS 等就是小菜一碟,只是语言语法上的差异。【PS:这个思想一致通用是我十分喜欢的一点,哈哈哈】
强烈推荐 RxSwift 学习文章(我就是看了下面的文章入门的):
ReacticeCocoa Vs RxSwift
1. 冷信号和热信号
冷信号:(例如网络请求)
- 是被动的,只有当你订阅的时候,它才会发布消息
- 只能一对一,当有不同的订阅者,消息是重新完整发送。
热信号:(例如 UI 交互)
- 是主动的,尽管你并没有订阅事件,但是它会时刻推送,
- 可以有多个订阅者,是一对多,集合可以与订阅者共享信息。
ReactiveCocoa 对冷信号和热信号的区别是很看重的,而 RxSwift 则不需要考虑是冷信号还是热信号。
关于冷热信号的更加细节的介绍,可以看以下文章:
- 细说ReactiveCocoa的冷信号与热信号(一)什么是冷信号与热信号
- 细说ReactiveCocoa的冷信号与热信号(二)为什么要区分冷信号与热信号
- 细说ReactiveCocoa的冷信号与热信号(三)怎么处理冷信号与热信号
2. 社区支持
相对于 RxSwift 背后的 ReactiveX 大社区的活跃支持,ReactiveCocoa 的社区支持明显是不足的,更多的是网上多年累月积累的在线教程,在社区支持方面 RxSwift 是有很大优势的。
3. 总结
实际上2个框架还有很多细节差异,但不管是 RxSwift 还是 ReactiveCocoa 框架,都是功能极其强大的框架,而且很多东西是相通的,在两者之间来回切换只是几个小时的问题。如果你之前学习过 Swift ,我个人推荐是从 RxSwift 入手,如果是只学习过 Objective-C 的话,还是从 ReactiveCocoa 入手好点。【PS: 我个人是偏爱 RxSwift 一点的,O(∩_∩)O哈哈~】