ReplaySubject


ReplaySubject

image

ReplaySubject 將對觀察者發送全部的元素,無論觀察者是何時進行訂閱的。

這里存在多個版本的 ReplaySubject,有的只會將最新的 n 個元素發送給觀察者,有的只會將限制時間段內最新的元素發送給觀察者。

如果把 ReplaySubject 當作觀察者來使用,注意不要在多個線程調用 onNext, onError 或 onCompleted。這樣會導致無序調用,將造成意想不到的結果。

let disposeBag = DisposeBag() let subject = ReplaySubject<String>.create(bufferSize: 1)  subject  .subscribe { print("Subscription: 1 Event:", $0) }  .disposed(by: disposeBag)  subject.onNext("🐶") subject.onNext("🐱")  subject  .subscribe { print("Subscription: 2 Event:", $0) }  .disposed(by: disposeBag)  subject.onNext("🅰️") subject.onNext("🅱️")

image

BehaviorSubject

image 當觀察者對 BehaviorSubject 進行訂閱時,它會將源 Observable 中最新的元素發送出來(如果不存在最新的元素,就發出默認元素)。然后將隨后產生的元素發送出來。

image

如果源 Observable 因為產生了一個 error 事件而中止, BehaviorSubject 就不會發出任何元素,而是將這個 error 事件發送出來。

let disposeBag = DisposeBag() let subject = BehaviorSubject(value: "🔴")  subject  .subscribe { print("Subscription: 1 Event:", $0) }  .disposed(by: disposeBag)  subject.onNext("🐶") subject.onNext("🐱")  subject  .subscribe { print("Subscription: 2 Event:", $0) }  .disposed(by: disposeBag)  subject.onNext("🅰️") subject.onNext("🅱️")  subject  .subscribe { print("Subscription: 3 Event:", $0) }  .disposed(by: disposeBag)  subject.onNext("🍐") subject.onNext("🍊") 

image

ControlProperty

ControlProperty 專門用於描述 UI 控件屬性的,它具有以下特征:

  • 不會產生 error 事件
  • 一定在 MainScheduler 訂閱(主線程訂閱)
  • 一定在 MainScheduler 監聽(主線程監聽)
  • 共享附加作用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM