RxiOS

RxSwift源码分析(1)——初探

2020-09-30  本文已影响0人  无悔zero
  1. RxSwift是函数响应式编程框架,属于Rx系列的其中一个框架。
什么是函数响应式编程? (最好分开理解)

一:函数式
函数式编程简称FP(Functional Programming),函数式编程就是一种抽象程度很高的编程范式,它将计算机运算看做是数学中函数的计算,而纯粹的函数式编程语言编写的函数没有变量,因此,任意一个函数,只要输入是确定的,输出就是确定的,这种纯函数我们称之为没有副作用。
而允许使用变量的程序设计语言,由于函数内部的变量状态不确定,同样的输入,可能得到不同的输出,因此,这种函数是有副作用的。
函数式编程的一个特点就是:允许把函数本身作为参数传入另一个函数,同时还允许返回一个函数!

二:响应式
对象对某一数据流变化做出响应的这种编码方式称为响应式。例如我们在爱奇艺平台观看视频,我们只需要在某一个时刻订阅了这个视频,后面平台自媒体运营者不断更新视频,我们随着时间也能自定接受推送,这就是响应。

RxSwift优势

RxSwift 是 Rx 为 Swift 语言开发的一门函数响应式编程语言, 它可以代替iOS系统的 Target Action / 代理 / 闭包 / 通知 / KVO,同时还提供网络、数据绑定、UI事件处理、UI的展示和更新、多线程……

  • Swift为值类型,在传值与方法回调上有影响,RxSwift一定程度上弥补Swift的灵活性
  • RxSwift使得代码复用性较强,减少代码量
  • RxSwift因为声明都是不可变更,增加代码可读性
  • RxSwift使得更易于理解业务代码,抽象异步编程,统一代码风格
  • RxSwift使得代码更易于编写集成单元测试,增加代码稳定性

{\large\text{作者:Cooci_和谐学习_不急不躁链接:https://www.jianshu.com/p/5533c99bfa8e来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。}}

  1. 有一句话叫万物皆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 { }
  1. RxSwift的响应流程主要分为:

创建序列 -> 订阅 -> 发送信号,响应 -> 销毁

  1. 使用例子:
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)
上一篇下一篇

猜你喜欢

热点阅读