RxSwift研究组-第1部分可观察到的

这是RxSwift学习会系列文章第一篇,文章编排与架构方式可以参考前言。

关于RxSwift

首先,RxSwift可以说是Swift中的响应式编程 。Swift就是一个程序语言,响应式编程是从哪里来的呢?

Microsoft有一个团队,他们为了解决异步造成的程序代码混乱,难以规范化,以及开发App遇见见的困难,他们决定开发一个库来解决这些问题。

2009年这个团队推出了一个客户端和服务器端框架,称为.NET(Rx)的反应性扩展 ,就是后来有人常讲的Rx库。

很快的这个框架就从外挂(.NET 3.5)变成内建核心库(.NET 4.0)。他们在2012年将这个框架开源,让不同的程序语言也可以做出自己的Rx库—这让Rx变成跨平台的标准。

因为Rx生态圈蓬勃发展,今时今日我们有许多不同语言都有Rx Library,实作一样的行为跟提供一样的API ,这让使用Rx的开发者,可以跟不同程序语言的开发者(例如,使用RxJS写web的人)讨论逻辑

举例来说,Rx文档中清楚定义了许多operator的名称与功能,其中一个叫做merge,而不同语言的Rx Library有实作这个merge operator。讨论某个资料处理的逻辑时,说出“把a跟b merge起来然后怎样怎样…”这种句子时,两个人都可以充分理解彼此在说什么😎。

因此可见,反应性编程其实已经存在很久了,不是一个新的东西,但它的核心概念让它在最近十年又开始备受瞩目。据Raywenderlich推出的这本书,RxSwift的定义为:

RxSwift是一个库,用于通过使用可观察的序列和功能样式运算符来组合基于异步和事件的代码,从而允许通过调度程序进行参数化执行。

但我们可以抓出几个关键字

  1. 目标:基于事件的异步代码
  2. 方法:可观察的序列,函数样式运算符,用于参数化执行的调度程序

简单来说,Rx的核心概念就是使用Observable Sequence + Functional Style Operator + Scheduler,把原本的代码变成基于事件的代码,解决异步造成的混乱。

问题一:异步造成了什么混乱?

在原本的设计中,ViewController同时要处理来自不同东西的异步事件。事件源包含委托,数据源,通知中心,GCD,关闭…等。无法有统一的管理方式,你经常会不晓得其中一个异步事件会先被触发。

问题二:Rx如何处理?

可观察序列可以将异步的结果变成一个事件。当我们需要处理异步时,只需要依据这个事件。

将来自不同地方的异步结果,用一致的概念包装起来,独立,逻辑清晰集中,跨平台都可以理解。这就是处理异步时最理想的状态,而不需要使用一大堆观察者模式像是KVO,通知,关闭,委托…等等,另外容易搞清楚先后顺序,在跨平台理解上门生物学也比较高。

如何把异步变成可观察序列呢?

  • 以UI元素来说
  • 系统状态

举例说明:

从API捞回最新的商品资料,依据价格高低排序后,从台币转换成美金,四舍五入取小数点后两位,更新UI。

一般写法

code顺序混乱,权责不清楚,在API中处理资料转换

可观察序列+函数样式运算符+调度程序改写

先改写APIManager

再改写ViewController

顺序,逻辑,分工清楚

可以抛光来,我们的逻辑变得一致且集中了!