RxSwift笔记 - Subjects

Subjects既是订阅者Observer,也是可观察序列Observable

一共有四种 Subjects,分别为:

  • PublishSubject
  • BehaviorSubject
  • ReplaySubject
  • Variable

Subject常用的几个方法:

  • onNext(:):on(.next(:))的简便写法。该方法相当于 subject 接收到一个.next 事件。
  • onError(:):on(.error(:))的简便写法。
  • onCompleted():on(.completed)的简便写法。

四种Subject的相同之处:

  • 首先他们都是 Observable,他们的订阅者都能收到他们发出的新的 Event。
  • 直到 Subject发出.complete或者.error 的 Event后,该 Subject便终结了,同时它也就不会再发出.next事件。
  • 对于那些在 Subject 终结后再订阅他的订阅者,也能收到 subject发出的一条 .complete.errorevent,告诉这个新的订阅者它已经终结了。
  • 他们之间最大的区别只是在于:当一个新的订阅者刚订阅它的时候,能不能收到Subject以前发出过的旧Event,如果能的话又能收到多少个。

四种Subject的不同点:

  • PublishSubject
    它不需要初始值就能创建。
    PublishSubject 的订阅者从他们开始订阅的时间点起,可以收到订阅后 Subject发出的新 Event,而不会收到他们在订阅前已发出的 Event

  • BehaviorSubject
    BehaviorSubject 需要通过一个默认初始值来创建。
    当一个订阅者来订阅它的时候,这个订阅者会立即收到 BehaviorSubjects上一个发出的event。之后就跟正常的情况一样,它也会接收到 BehaviorSubject 之后发出的新的event

  • ReplaySubject
    ReplaySubject在创建时候需要设置一个bufferSize,表示它对于它发送过的 event的缓存个数。
    如果一个 subscriber订阅已经结束的ReplaySubject,除了会收到缓存的 .nextevent外,还会收到那个终结的.error 或者.completeevent

  • Variable其实就是对BehaviorSubject 的封装

你可能感兴趣的:(RxSwift笔记 - Subjects)