// *** multicast : 将源可观察序列转换为可连接序列,并通过指定的主题广播其发射。
print("*****multicast*****")
let subject = PublishSubject<Any>()
subject.subscribe{print("00:\($0)")}
.disposed(by: disposeBag)
let netOB = Observable<Any>.create { (observer) -> Disposable in
sleep(2)// 模拟网络延迟
print("我开始请求网络了")
observer.onNext("请求到的网络数据")
observer.onNext("请求到的本地")
observer.onCompleted()
return Disposables.create {
print("销毁回调了")
}
}.publish()
netOB.subscribe(onNext: { (anything) in
print("订阅1:",anything)
}).disposed(by: disposeBag)
netOB.subscribe(onNext: { (anything) in
print("订阅2:",anything)
}).disposed(by: disposeBag)
_ = netOB.connect()
Observable.publish()会生成并返回ConnectableObservableAdapter对象,该对象存储了Observable和新建的:PublishSubject。
当ConnectableObservableAdapter被订阅时,生成AnonymousObserver存储订阅回调,并执行PublishSubject的subscribe(observer),PublishSubject会存储该observer。
当ConnectableObservableAdapter调用connect()方法时,生成Connection对象,其持有lazySubject;调用Observable的subscribe(Connection)方法。
Connection作为Observer,所有会来到Connection的on方法,而on方法中会调用Connection所持有的PublishSubject的on方法。PublishSubject就会遍历其存储的_observers的on方法。