RxSwift - ShenYj/ShenYj.github.io GitHub Wiki
我是2021年4月份
才开始使用并学习RxSwift
的
为什么是使用并学习, 而不是学习并使用?
- 感兴趣的可以先看下
RxSwift
作者Shai Mishali
的这篇文章RxSwift to Apple’s Combine “Cheat Sheet”,来感受下当时Combine
和RxSwift
的功能对比 - 向下兼容
- Talk is cheap, 说到
MVVM
,大部分的iOSer
都能侃侃而谈,MVVM
和VIPER
还只存在于嘴皮子上,然而能纯正的写出一个纯MVVM
架构项目的少之又少,虽然很多人能用RxSwift
去实现MVVM
或写项目, 但不是这偷个懒, 就是那对付一下, 基本都是MVC+MVVM
的混搭,在一些企鹅群中大部分的声音都称之为卷
,然而我是一个有代码洁癖的人,想要突破自己的人,写够了MVC
和MVP
,于是在2021年4月份的新项目上,决定开始使用RxSwift
,万事开头难,我连RxSwift
用都还是个问题, 还要去赶项目进度,所以第一个项目的压力可想而知-
第一个
RxSwift
项目(2021年 4月7日~7月26):- 4月份的白天赶进度、晚上学习(期间赶上耳朵发炎, 每周都会请2~3天假去医院,进度上耽误了)
- 5月份的状态就是填坑
- 6月份研究
MVVM
- 7月份上线,迭代的同时重构代码,为下一个项目做准备 (多版本的项目,7月16日和7月26日分别上线)
- 7月26日混进了
RxSwift Community
组织
- 7月26日混进了
-
第二个
RxSwift+MVVM
项目 (2021年 8月13日~10月29日)- 8、9、10月份,2个半月左右时间,一开始就是按照
MVVM
的架构去设计和实现的,时刻关注Rx
的引用计数, 熟练+轻松搞定
- 8、9、10月份,2个半月左右时间,一开始就是按照
-
来感受下提交记录
第一个项目:
第二个项目:
-
细心的你可能也发现了,我的第一个项目并不是直接上的MVVM
架构,因为我先要解决RxSwift
用起来的问题,在我填了一些坑后再去具体研究的MVVM
,虽然边学边用很痛苦,但是成果是丰厚的,学习的效率很高,后续的项目就是在之前复用的基础上去丰富、补充
为什么混进了
RxSwift Community
组织?
- 因为发布了
RxSwift 6
这个大版本,而我对RxSwift
衍生库依赖性较强,开始推动这些衍生库的更新,顺便就进去了,拉我进去的就是Moya
的作者,为什么强调一下,因为在学习RxSwift
后发现了一连串有意思的事情,比如Moya 15.0
的发布,此处省略一万字。
作为一名iOS开发者,感觉苹果在开发者文档这做的不是很专业,从苹果的示例代码和demo可见,很随意,比如在iOS移动端架构上没有一个官方的模板,网上的示例demo也都是五花八门,由于Swift
语法更加灵活,代码风格更加的多变,让我最不能接受的就是:
-
新老api风格不统一
比如定位状态,有属性、有方法,Swift 5.5增加了async/await,又+1;类似的功能,有的是走协议回调,有的是走block;换个纬度还有同步有异步的
-
新功能不向下兼容
我是一个对代码精益求精的人,打了这么多嘴炮,真正落实下来的时候,不知道如何下手了,第一件事:先找一个标准,然后效仿它
于是我找到了它 CleanArchitectureRxSwift
当然我并不是凭借自己的努力搜索直接找到的它,而是看了最强开源MVVM+RxSwift的项目
SwiftHub
后知道的它
顺便插播一条广告, 我也是它的贡献者,没错,我是。
- 第一次提了一个修复iOS 15.0命名冲突的PR
- 第二次来了个大更新,升级到了RxSwift 6,作为我的启蒙,我希望它保持鲜活的,而不是死掉的
关于MVVM
架构实现的合理性是存在一些争议的,也有其他的示例模板项目仓库,现阶段,我觉得它是适合我的
另外分享两篇文章
虽然想要整理RxSwift
的版本变化,但我不会一条条的去罗列,因为其他人的文章也是翻译的Shai Mishali
作者的文章,在此我罗列了原文的链接,有意思的是作者看起来是个喜新厌旧的人,发的文章还不在一块
版本 | 文章链接 |
---|---|
RxSwift 5 | What’s new in RxSwift 5 |
RxSwift 6 | What’s new in RxSwift 6 |
每个人都有自己的学习方法,但无非就是看资料+实践
以我的RxSwift
学习经历来讲应该算是少数,毕竟不是每家公司都允许你在赶项目的同时去学习新技术的,我是有一定自信的,因为RN
我就是这么干的,但不得不说在学习曲线上RxSwift
还是比较高的
换个角度,也不是每个码农都愿意去牺牲自己时间的,在日常RxSwift
技术交流的时候,不乏冒出一些声音,XXXX不就行了吗,没必要XXXXX,可能对他们来说这就是卷吧。
在此,我整理了一些自己觉得不错的资料:
-
单篇文章
- RxSwift 介绍
-
Comparison with other libraries RxSwift 提供的有关
Combine
和ReactiveSwift
的对比介绍 - Throttle vs Debounce in RxSwift 初次接触Rx时,对它的理解是抽象的,比如看了很多操作符,不知道具体能做什么,这篇文章强烈推荐去看一下,以很具体的场景为例,让你感受Rx的魅力,如果这篇文章看后你还是不懂节流和防抖,那就告别RxSwift吧
- Learn Rx by implementing Observable CleanArchitectureRxSwift 作者的一篇文章
-
RxSwift 核心实现原理 网上大部分有关RxSwift的资料都是倾向于介绍各种操作符是如何使用的,这篇文章是一篇关于底层实现探索的,作者有参考上篇文章
Learn Rx by implementing Observable
- 谈谈RxSwift中的错误处理 介绍了Rx几种操作符的使用
- Testing Your RxSwift Code RxSwift作者的文章
- RxSwift 的单元测试 RxSwift 提供有两个互补的单元测试工具: RxTest 和 RxBlocking, 这篇文章主要是介绍这两个工具
- 架构整洁之道
- iOS设计模式详解
-
系统性资料
- 逻辑教育Cooci讲师的一套文章RxSwift
- RxSwift仓库下链接的翻译的中文文档 RxSwift: ReactiveX for Swift
- 中文资料 RxSwift
-
书
-
项目
- SwiftHub MVVM
- RxEarthquake Cause-Logic-Effect Architecture.
最后,如果你是一名 RxSwift 新手,强烈建议你看一下我的 RxSwift及衍生库的选择 这篇笔记,或许能在前期为你节省一些时间
在开发时打开这两份资料 (上面系统性资料中有提到): RxSwift: ReactiveX for Swift、RxSwift的一些操作符的示例 ,作为字典进行查阅,通过不断的练习、使用,将会熟练运用
作为新手,SwiftHub
对于你来说可能并不友好,有些重,不妨先学习 CleanArchitectureRxSwift
这个项目(通过 RxSwift 实现 Clean Architecture MVVM架构的一个 demo),如果你觉得还是有一定难度,那么也可以看看我的这个示例(以具体场景为例的一次简单实战演练)模拟短信倒计时的交互场景