RxSwift源码分析(1)——初探
2020-09-30 本文已影响0人
无悔zero
- RxSwift是函数响应式编程框架,属于Rx系列的其中一个框架。
什么是函数响应式编程? (最好分开理解)
一:函数式
函数式编程简称FP(Functional Programming),函数式编程就是一种抽象程度很高的编程范式,它将计算机运算看做是数学中函数的计算,而纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。
而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。
函数式编程的一个特点就是:允许把函数本身作为参数传入另一个函数,同时还允许返回一个函数!二:响应式
对象对某一数据流变化做出响应的这种编码方式称为响应式。例如我们在爱奇艺平台观看视频,我们只需要在某一个时刻订阅了这个视频,后面平台自媒体运营者不断更新视频,我们随着时间也能自定接受推送,这就是响应。RxSwift优势
RxSwift 是 Rx 为 Swift 语言开发的一门函数响应式编程语言, 它可以代替iOS系统的 Target Action / 代理 / 闭包 / 通知 / KVO,同时还提供网络、数据绑定、UI事件处理、UI的展示和更新、多线程……
- Swift为值类型,在传值与方法回调上有影响,RxSwift一定程度上弥补Swift的灵活性
- RxSwift使得代码复用性较强,减少代码量
- RxSwift因为声明都是不可变更,增加代码可读性
- RxSwift使得更易于理解业务代码,抽象异步编程,统一代码风格
- RxSwift使得代码更易于编写集成单元测试,增加代码稳定性
- 有一句话叫万物皆
Rx
,就是所有对象都能点出rx
,例如object.rx
。从源码里可以看到,rx
这个属性是ReactiveCompatible
协议的,而NSObject
继承了ReactiveCompatible
,所以所有对象都能点出rx
。
/// A type that has reactive extensions.
public protocol ReactiveCompatible {
/// Extended type
associatedtype CompatibleType
/// Reactive extensions.
static var rx: Reactive<CompatibleType>.Type { get set }
/// Reactive extensions.
var rx: Reactive<CompatibleType> { get set }
}
extension ReactiveCompatible {
...
}
import class Foundation.NSObject
/// Extend NSObject with `rx` proxy.
extension NSObject: ReactiveCompatible { }
- RxSwift的响应流程主要分为:
创建序列 -> 订阅 -> 发送信号,响应 -> 销毁
- 使用例子:
NotificationCenter.default.rx.notification(UIResponder.keyboardWillShowNotification)
.subscribe(onNext: { (notification) in
print("键盘弹出")
}).disposed(by: disposeBag)
button.rx.tap
.subscribe(onNext: { (event) in
print("点击按钮")
}).disposed(by: disposeBag)
textFiled.rx.text.changed.subscribe { (text) in
print("输入改变")
}.disposed(by: disposeBag)