publish

将 Observable 转换为可被连接的 Observable

publish - 图1

publish 会将 Observable 转换为可被连接的 Observable。可被连接的 Observable 和普通的 Observable 十分相似,不过在被订阅后不会发出元素,直到 connect 操作符被应用为止。这样一来你可以控制 Observable 在什么时候开始发出元素。


演示

1. let intSequence = Observable<Int>.interval(1, scheduler: MainScheduler.instance)
2. .publish()

4. _ = intSequence
5. .subscribe(onNext: { print("Subscription 1:, Event: \($0)") })

7. DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
8. _ = intSequence.connect()
9. }

11. DispatchQueue.main.asyncAfter(deadline: .now() + 4) {
12. _ = intSequence
13. .subscribe(onNext: { print("Subscription 2:, Event: \($0)") })
14. }

16. DispatchQueue.main.asyncAfter(deadline: .now() + 6) {
17. _ = intSequence
18. .subscribe(onNext: { print("Subscription 3:, Event: \($0)") })
19. }

输出结果:

1. Subscription 1:, Event: 0
2. Subscription 1:, Event: 1
3. Subscription 2:, Event: 1
4. Subscription 1:, Event: 2
5. Subscription 2:, Event: 2
6. Subscription 1:, Event: 3
7. Subscription 2:, Event: 3
8. Subscription 3:, Event: 3
9. Subscription 1:, Event: 4
10. Subscription 2:, Event: 4
11. Subscription 3:, Event: 4
12. Subscription 1:, Event: 5
13. Subscription 2:, Event: 5
14. Subscription 3:, Event: 5
15. Subscription 1:, Event: 6
16. Subscription 2:, Event: 6
17. Subscription 3:, Event: 6
18. ...