PublishSubject

PublishSubject 将对观察者发送订阅后产生的元素,而在订阅前发出的元素将不会发送给观察者。如果你希望观察者接收到所有的元素,你可以通过使用 Observable 的 create 方法来创建 Observable,或者使用 ReplaySubject。

如果源 Observable 因为产生了一个 error 事件而中止, PublishSubject 就不会发出任何元素,而是将这个 error 事件发送出来。
演示
1. let disposeBag = DisposeBag()
2. let subject = PublishSubject<String>()
4. subject
5. .subscribe { print("Subscription: 1 Event:", $0) }
6. .disposed(by: disposeBag)
8. subject.onNext("?")
9. subject.onNext("?")
11. subject
12. .subscribe { print("Subscription: 2 Event:", $0) }
13. .disposed(by: disposeBag)
15. subject.onNext("?️")
16. subject.onNext("?️")
输出结果:
1. Subscription: 1 Event: next(?)
2. Subscription: 1 Event: next(?)
3. Subscription: 1 Event: next(?️)
4. Subscription: 2 Event: next(?️)
5. Subscription: 1 Event: next(?️)
6. Subscription: 2 Event: next(?️)
