ReplaySubject
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("🅱️") 
         
         
         
        BehaviorSubject
 當觀察者對 BehaviorSubject 進行訂閱時,它會將源 Observable 中最新的元素發送出來(如果不存在最新的元素,就發出默認元素)。然后將隨后產生的元素發送出來。
如果源 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("🍊")  
         
         
         
        ControlProperty
ControlProperty 專門用於描述 UI 控件屬性的,它具有以下特征:
- 不會產生 error 事件
 - 一定在 MainScheduler 訂閱(主線程訂閱)
 - 一定在 MainScheduler 監聽(主線程監聽)
 - 共享附加作用
 




