人们通常议论反应式编程,特别是 RxSwift,以为它是描绘运用程序逻辑的终极方式 — 事情链、过错处理、异步。但不要忘了,RxSwift 自身也是一种东西,能够让你为任何东西增加反应式扩展。
RxSwift 具有一个庞大而赋有创造力的社区。RxSwiftCommunity 的 github 存储库中目前有 55 个不同规划和用途的存储库。它们的根源都是反应式编程。
下面我将谈谈我的 Podfile 中必备的依赖项。
RxKeyboard
咱们都喜爱用键盘重叠暗码字段,不是吗?
我不想数代码行数,也不想描绘我对运用 NotificationCenter
的有多么反感。只需看看通过事情序列的概念来表达键盘高度的变化是多么酷。让我提醒你,这里供给了一切 Rx 操作符。你能够在这里运用debounce
,或与另一个 Observable
结合运用,等等。下面是我最喜爱的声明式代码示例:
RxKeyboard.instance.isHidden
.drive(backgroundFadeView.rx.isHidden)
.disposed(by: disposeBag)
我能够解释一下,当键盘躲藏时,我会躲藏 backgroundFadeView
;当键盘可见时,我会显示 backgroundFadeView
。尽管你一眼就看明白了。
RxGesture
当 UIButton
不够用时,这种状况十分常见。让咱们比较一下语法:
...
我能够再次解释,咱们只过滤 .ended
手势并核算翻译。但即便你不熟悉这个结构或 RxSwift,这也是显而易见的。
这种旧式 Cocoa 形式的问题在于,一切类中的代码都很涣散。要想知道视图发生了什么,你有必要翻遍整个类,找到实际上应该会集在一处的代码。你需求:
- 写回调函数;
- 创立
GestureRecognizer
; - 装备它(设置最大触摸次数
maximumNumberOfTouches
); - 将其增加到视图;
第一项是最可怕的。该类将有一个函数传递给 #selector()
。这是一个真实的函数吗?不是,这是一个无缘无故起了姓名的回调函数。这个函数有必要是匿名的(例如闭包),以约束开发人员手动调用它。
类似 setupGestureRecognizer
这样的 util 函数也存在相同的问题,由于组件的设置代码就放在这里。这些函数并不是真实意义上的函数。它们并不表达类的行为。咱们只需求以某种方式将代码分隔 “以进步其可读性”。与此同时,类的规划增大了,意义也变得不那么明晰了,真实的业务逻辑也变得复杂难懂了。
有了 RxGesture,你的一切代码(创立、装备、回调)都会集在一处。你能够快速查看并修改它们。没有任何无意义的有用函数是徒劳地企图保持代码分离的成果。
RxDataSources
最简洁的部分 怎么处理每个 iOS 开发人员生命中最重要的东西(UITableView
/ UICollectionView
)?如此重要的问题却需求大量代码。
咱们有遍布整个类的代码,还有托付,以及彻底无用的 numbersOfRowInSection
和 numberOfSections
办法。section 应该用语言东西来表达,例如,通用结构 SectionModel <String, Int>
,它需求一个 section 的称号和一个 section 元素数组。现在,能够隐式地推断出 section 和 cell 的数量。数组的长度总是等于 section 的个数,嵌套数组的长度等于 section 中 cell 的个数。
而且也不需求通过 IndexPath
来触摸数组中的 item。保持简略。下面的闭包 configureCell
将模型作为参数。程序员只需从中创立一个单元格即可。
还有一个额外的奖赏 –diff 算法,其作业复杂度为 O(N)。咱们将在下一篇文章中详细介绍。只需发射一个新的部分数组,结构就会只更新需求的地方。不再需求调用 reloadData
。此外,还支撑开箱即用的动画更新和便利的闭包,而不是过期的托付。对我来说,在 collectionView 中运用页脚活动指示器从未如此便利。
RxSwiftExt
RxSwift 完结了 reactiveX.io 规范,但对新想法并不十分隔放。但这并不妨碍社区的开展,因此有了自定义操作符库。它们都十分小巧简略,但却能协助我避免每天编写几十行代码。
假如你已经有了运用 Rx 的经验,你或许会对最佳过错处理实践感兴趣。有人会主张运用 Railway 形式和 Result
类型,而不是 onNext
、onError
必不可少的回调系统。
我最喜爱的办法是将事情序列拆分为过错序列和元素序列。运用这种办法,除非你期望,不然不会呈现任何可观察事情完结或失败并伴有过错的状况。
我主张你在此处阅览更多有关运用 Materialize 处理 RxSwift 过错的信息。
RxFlow
以被迫方式处理导航问题的绝佳结构。关于它的文章即将发布,假如不想错过,请重视我:)
不难看出,反应式结构结合了类似的语法和动机。人们期望在不下降可读性的前提下减少代码量。而 RxSwift 选用异步事情的作业方式,的确能让你做到这一点。你只需求一行代码,而命令式风格或许需求十行代码。
我强烈主张你浏览 RxSwiftCommunity 中的其他资源库。你会发现许多 iOS 部件的反应式扩展,以及包括单向数据流在内的多种架构。了解解决日常使命的其他办法总是十分有用的。或许它们会比你的更好?
假如你喜爱这个故事,请点赞并共享,协助其他人找到它!欢迎在下方留言。重视我,了解更多关于 RxSwift 的信息。
RxFeedback
参阅: