RxSwift - ShenYj/ShenYj.github.io GitHub Wiki

RxSwift

.

学习历程

.

我是2021年4月份才开始使用并学习RxSwift

为什么是使用并学习, 而不是学习并使用?

  • 感兴趣的可以先看下RxSwift作者Shai Mishali的这篇文章RxSwift to Apple’s Combine “Cheat Sheet”,来感受下当时CombineRxSwift的功能对比
  • 向下兼容
  • Talk is cheap, 说到MVVM,大部分的iOSer都能侃侃而谈,MVVMVIPER还只存在于嘴皮子上,然而能纯正的写出一个纯MVVM架构项目的少之又少,虽然很多人能用RxSwift去实现MVVM或写项目, 但不是这偷个懒, 就是那对付一下, 基本都是MVC+MVVM的混搭,在一些企鹅群中大部分的声音都称之为,然而我是一个有代码洁癖的人,想要突破自己的人,写够了MVCMVP,于是在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组织
    • 第二个RxSwift+MVVM项目 (2021年 8月13日~10月29日)

      • 8、9、10月份,2个半月左右时间,一开始就是按照MVVM的架构去设计和实现的,时刻关注Rx的引用计数, 熟练+轻松搞定
    • 来感受下提交记录

      第一个项目:.
      第二个项目:.

细心的你可能也发现了,我的第一个项目并不是直接上的MVVM架构,因为我先要解决RxSwift用起来的问题,在我填了一些坑后再去具体研究的MVVM,虽然边学边用很痛苦,但是成果是丰厚的,学习的效率很高,后续的项目就是在之前复用的基础上去丰富、补充

为什么混进了RxSwift Community组织?

  • 因为发布了RxSwift 6这个大版本,而我对RxSwift衍生库依赖性较强,开始推动这些衍生库的更新,顺便就进去了,拉我进去的就是Moya的作者,为什么强调一下,因为在学习RxSwift后发现了一连串有意思的事情,比如Moya 15.0的发布,此处省略一万字。

MVVM

作为一名iOS开发者,感觉苹果在开发者文档这做的不是很专业,从苹果的示例代码和demo可见,很随意,比如在iOS移动端架构上没有一个官方的模板,网上的示例demo也都是五花八门,由于Swift语法更加灵活,代码风格更加的多变,让我最不能接受的就是:

  1. 新老api风格不统一

    比如定位状态,有属性、有方法,Swift 5.5增加了async/await,又+1;类似的功能,有的是走协议回调,有的是走block;换个纬度还有同步有异步的

  2. 新功能不向下兼容

我是一个对代码精益求精的人,打了这么多嘴炮,真正落实下来的时候,不知道如何下手了,第一件事:先找一个标准,然后效仿它

于是我找到了它 CleanArchitectureRxSwift

当然我并不是凭借自己的努力搜索直接找到的它,而是看了最强开源MVVM+RxSwift的项目SwiftHub后知道的它

顺便插播一条广告, 我也是它的贡献者,没错,我是。

  • 第一次提了一个修复iOS 15.0命名冲突的PR
  • 第二次来了个大更新,升级到了RxSwift 6,作为我的启蒙,我希望它保持鲜活的,而不是死掉的

关于MVVM架构实现的合理性是存在一些争议的,也有其他的示例模板项目仓库,现阶段,我觉得它是适合我的

另外分享两篇文章

RxSwift版本变化

虽然想要整理RxSwift的版本变化,但我不会一条条的去罗列,因为其他人的文章也是翻译的Shai Mishali作者的文章,在此我罗列了原文的链接,有意思的是作者看起来是个喜新厌旧的人,发的文章还不在一块

版本 文章链接
RxSwift 5 What’s new in RxSwift 5
RxSwift 6 What’s new in RxSwift 6

RxSwift学习资源

每个人都有自己的学习方法,但无非就是看资料+实践

以我的RxSwift学习经历来讲应该算是少数,毕竟不是每家公司都允许你在赶项目的同时去学习新技术的,我是有一定自信的,因为RN我就是这么干的,但不得不说在学习曲线上RxSwift还是比较高的

换个角度,也不是每个码农都愿意去牺牲自己时间的,在日常RxSwift技术交流的时候,不乏冒出一些声音,XXXX不就行了吗,没必要XXXXX,可能对他们来说这就是卷吧。

在此,我整理了一些自己觉得不错的资料:

最后,如果你是一名 RxSwift 新手,强烈建议你看一下我的 RxSwift及衍生库的选择 这篇笔记,或许能在前期为你节省一些时间

在开发时打开这两份资料 (上面系统性资料中有提到): RxSwift: ReactiveX for SwiftRxSwift的一些操作符的示例 ,作为字典进行查阅,通过不断的练习、使用,将会熟练运用

作为新手,SwiftHub 对于你来说可能并不友好,有些重,不妨先学习 CleanArchitectureRxSwift 这个项目(通过 RxSwift 实现 Clean Architecture MVVM架构的一个 demo),如果你觉得还是有一定难度,那么也可以看看我的这个示例(以具体场景为例的一次简单实战演练)模拟短信倒计时的交互场景

⚠️ **GitHub.com Fallback** ⚠️