前言
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
它尝试将原有的一些概念移植到 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只是其中的一个语言分支,它还支持很多语言与平台:
- 目前的Apple平台上的SwiftUI与Combine,Android的ComposeUI以及前端的Vue等框架都是响应式的,也可以看出响应式编程思想的流行。
下一节预告
在整个Rx中,Observable - 可监听序列(简称序列)都是根基。
我会根据自己曾经在从事的工控编程思路上,来理解Observable。
参考文档
书籍《移动开发架构设计实战》
RxSwift编写wanandroid客户端现已开源
目前RxSwift编写wanandroid客户端已经开源了——项目链接。记得给个star喔!
附上一张效果图片: