前言

RxSwift是一个基于响应式编程的Swift框架,它提供了一种简练而强壮的办法来处理异步和事情驱动的编程任务。在RxSwift中,中心流程包含调查者可调查序列订阅

RxSwift中心流程三部曲

   // 1.创立序列
   _ = Observable<String>.create { ob in
     // 3.发送信号
      ob.onNext("你好")
      return Disposables.create()
     // 2.订阅序列
    }.subscribe(onNext: { text in
      print("订阅到了\(text)")
    })
  }
  • 1.创立序列
  • 2.订阅序列
  • 3.发送信号

上面三部曲的履行成果:

RxSwift核心流程简介
第一次玩RxSwift比较好奇为什么会打印订阅到了你好,分明是两个闭包里边的代码。 咱们先简略剖析下:

  • 序列创立create后面带了闭包A闭包A里边履行了发送信号的流程
  • 订阅subsribe后面带了闭包B
  • 依据成果咱们知道一定是先履行了闭包A,再把闭包A你好传给了闭包B,然后输出成果

RxSwift中心逻辑剖析

创立序列

RxSwift核心流程简介

点进create函数能够看到它是拓宽了ObservableType这个协议,同时创立了一个AnonymousObservable内部类(看姓名是匿名序列,具有一些通用的特性)剖析AnonymousObservable的承继链能够得到下面的联系图:

RxSwift核心流程简介

AnonymousObservable

RxSwift核心流程简介
AnonymousObservable是承受Element泛型的承继自Producer的类,他承受并保存一个闭包subscribeHandler的参数,这个其实便是上面咱们说的闭包A,别的有一个run函数(后面会提到)

Producer

RxSwift核心流程简介
Producer是承受Element泛型的承继自Observable的类,有一个subscribe的完成,run的笼统办法,这个subscribe非常重要

Observable

RxSwift核心流程简介
Observable是承受Element泛型的完成ObservableType协议的类,有一个subscribe的笼统办法,asObservable的完成(回来self,一致万物皆序列) 同时Observable有统计引证计数的才能(Resources这个结构体在序列调查者毁掉者等都用到,能够调试是否有内存走漏),其中的AtomicInt是一把NSLock的锁,保证数据的存取安全

RxSwift核心流程简介

ObservableType

RxSwift核心流程简介

ObservableType是拓宽ObservableConvertibleType协议的协议,界说了subscribe协议办法,完成了asObservable()办法,所以这儿咱们得出结论,不一定要承继Observable的才是序列,只要是完成了ObservableTypesubscribe的协议办法的也能够算是序列,进一步佐证万物接序列

ObservableConvertibleType

RxSwift核心流程简介

ObservableConvertibleType是个协议,相关了Element类型,界说asObservable的协议办法

订阅序列

点击subscribe函数

RxSwift核心流程简介

它是ObservableType的拓宽才能,创立了一个AnonymousObserver(匿名调查者) ,承受的Element仔细查看承继链代码会发现跟序列创立的泛型是同一个

剖析AnonymousObserver的承继链咱们能够得到下图:

RxSwift核心流程简介

AnonymousObserver

RxSwift核心流程简介
AnonymousObserver是承受Element泛型的承继自ObserverBase的类 保存了一个eventHandler的闭包,这个咱们界说是闭包C 同时也有统计引证计数的才能,有一个onCore的完成

ObserverBase

RxSwift核心流程简介

ObserverBase是承受Element泛型的完成DisposableObserverType两个协议的类,有一个on的完成,onCore的笼统办法

ObserverType

RxSwift核心流程简介

ObserverType相关了Element,界说了on的协议办法,拓宽界说了onNextonCompletedonError的办法,这三个办法其实都是on一个Event

其中Event是个枚举,有三类事情:next事情error事情completed事情

  • next事情next事情携带了一个值,表明数据的更新或新的事情。
  • error事情error事情表明发生了一个错误,中止了事情的正常流程。
  • completed事情completed事情表明事情流的结束,不再有新的事情产生。 调查者经过订阅可调查序列来接收事情。

Disposable

RxSwift核心流程简介

Disposable这个协议比较简略,界说了dispose办法

订阅流程剖析

  • 1.调用self.asObservable().subscribe(observer)

    • 这个selfAnonymousObservable的实例
    • 调用asObservable办法经过承继链最终调用Observable的完成,回来self,也就还是AnonymousObservable的实例
  • 2.调用AnonymousObservable的实例的subscribe办法,经过承继链调用Producersubscribe办法

RxSwift核心流程简介

  • 3.Producerrun办法在AnonymousObservable有完成

RxSwift核心流程简介
这个sink的处理是适当不错的,很好的做到了事务下沉,同时很好的运用了中间件单一责任的规划模式,值得学习。

sink是管道的意思,下水道,什么东西都会往里边丢,这儿面有订阅者毁掉者

    1. sink.run
    1. parent.subscribeHandler(AnyObserver(self))这儿的parent便是AnonymousObservable的实例,调用subscribeHandler这个也便是咱们界说的闭包A 这儿解说了订阅的时候会来到咱们的闭包A的原因。 这儿需求注意到AnyObserver这个类,他里边保存的observer特点其实是AnonymousObservableSink.on函数

发送信号

有了上两步的基础咱们剖析发送信号的流程应该比较明晰了

    1. obserber.onNext 其实便是AnyObserver.onNext
    1. ObserverType.onNext其实便是ObserverType.on
    1. 其实便是AnyObserver.on

RxSwift核心流程简介

  • 4.这个observer便是上面第二步最后的AnonymousObservableSink.on函数

RxSwift核心流程简介

  • 5.父类Sink.forwardOn函数

RxSwift核心流程简介
这儿的self.observer类型是 AnonymousObserver

  • 6.调用AnonymousObserver的父类ObserverBaseon办法

RxSwift核心流程简介

  • 7.调用AnonymousObserveronCore办法

RxSwift核心流程简介

  • 8.调用eventHandler,也便是咱们界说的闭包C
  • 9.闭包C依据Event调用闭包B闭包B输出了控制台的成果,至此,整个链路履行结束了。

RxSwift核心流程简介

把整个中心流程用思想导图描绘出来:

RxSwift核心流程简介

总结

  • 万物皆序列,序列的概念一致了编码
  • 完好的承继链做到了事务分离单一责任
  • 中间价模式很好的做到了事务下沉