阅读 176

RxSwift学习——了解ReactiveX| 8月更文挑战

前言

6月更文挑战,我其后半段我主要是围绕RxSwift如何编写wanandroid客户端来进行,但是其中有个很重要的框架并没有进行阐述与讲解,没错,就是——RxSwift本身。

所以在8月的活动中,我会尽可能的去以我理解的Rx,来给大家讲解RxSwift框架,因为能力有限,不足和错误的地方还欢迎大家指正和讨论。

另外,在6月的日更中,我自己也了解到自己没有那么多肝,所以这次依照我自己的节奏去进行更文。

什么是Rx

在20世纪70年代,有研究人员利用多线程处理器来解决内存访问产生的延时,在同一时代,有人提出了响应式编程,但在当时,响应式编程并不是很流行。

直到2009年,践行响应式编程的、服务于.NET开发领域的Reactive Extension for .NET(Rx.NET)库被发表;不久,Reactive Extension还被移植到微软开发的手机操作系统Windows Phone,并逐渐被应用到更多语言的开发中;2012年11月,Reactive Extension宣布开源。

Reactive Extension简称ReactiveX,或者Rx,由微软软件架构师Erik Meijer和他的团队共同开发。Rx是一个函数库,提供操作符等工具帮助开发这编写异步和基于事件流的程序。

什么是RxSwift

RxSwift 是 Rx 的 Swift 版本。

它尝试将原有的一些概念移植到 iOS/macOS 平台。

在这里找到跨平台文档 ReactiveX.io

它将KVO异步操作全部被统一成抽象序列,便于iOS/macOS平台的开发者进行异步编程。

为什么是RxSwift

在移动端开发领域,用户通过用户界面输入信息,应用程序处理UI与数据之间的交互非常频繁,传统的编程方式和代码形态并不擅长形象地表达这种事件流,而RxSwift践行函数响应式编程,有助于解决这一问题的利器。

我们拿官方中文文档的按钮的点击事件为例:

传统实现方法 target-action

button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside)
复制代码
func buttonTapped() {
    print("button Tapped")
}
复制代码

通过RxSwift来实现:

button.rx.tap
    .subscribe(onNext: {
        print("button Tapped")
    })
    .disposed(by: disposeBag)
复制代码

通过以上代码我们可以看到:

传统的target-action方式,添加target与实现的action分离,对于代码理解并不是很好,通过RxSwift的封装后的代码更加一目了解。

当然,简单的代价是需要理解其实现原理与Rx的思维模式,这无疑也增加了学习成本。而随着RxSwift的深入,有的时候理解与维护也有困难之处。

总结

  • 由于人对事物的认知模式,理解同步是简单的,而理解异步是困难的。

  • 上个世纪70年就提出了响应式编程来解决异步编程的问题,我个人理解是受限于硬件、编程语言本身并没有流行起来。

  • 随着2009年Rx.NET的推出,和2012年Reactive Extension的开源,函数响应式编程被越来越多的被运用。

  • Reactive Extension简称为ReactiveX或者Rx,而RxSwift只是其中的一个语言分支,它还支持很多语言与平台:

image.png

  • 目前的Apple平台上的SwiftUI与Combine,Android的ComposeUI以及前端的Vue等框架都是响应式的,也可以看出响应式编程思想的流行。

下一节预告

在整个Rx中,Observable - 可监听序列(简称序列)都是根基。

我会根据自己曾经在从事的工控编程思路上,来理解Observable。

参考文档

RxSwift 中文文档

书籍《移动开发架构设计实战》

RxSwift编写wanandroid客户端现已开源

目前RxSwift编写wanandroid客户端已经开源了——项目链接。记得给个star喔!

附上一张效果图片:

RPReplay_Final1625472730.2021-07-05 16_13_58.gif

文章分类
iOS
文章标签