Slide 23
Slide 23 text
final class CombineLatestSink3_ : CombineLatestSink {
…
func run() -> Disposable {
let subscription1 = SingleAssignmentDisposable()
let subscription2 = SingleAssignmentDisposable()
let subscription3 = SingleAssignmentDisposable()
let observer1 = CombineLatestObserver(lock: self._lock, parent: self, index: 0, setLatestValue: { (e: E1)
-> Void in self._latestElement1 = e }, this: subscription1)
let observer2 = CombineLatestObserver(lock: self._lock, parent: self, index: 1, setLatestValue: { (e: E2)
-> Void in self._latestElement2 = e }, this: subscription2)
let observer3 = CombineLatestObserver(lock: self._lock, parent: self, index: 2, setLatestValue: { (e: E3)
-> Void in self._latestElement3 = e }, this: subscription3)
subscription1.setDisposable(self._parent._source1.subscribe(observer1))
subscription2.setDisposable(self._parent._source2.subscribe(observer2))
subscription3.setDisposable(self._parent._source3.subscribe(observer3))
return Disposables.create([
subscription1,
subscription2,
subscription3
])
}
…
}
CompositeDisposableでひとまとめにするので
下流では1つをdisposeすれば3つのDisposableに伝播する
上流のSubscriptionのラップ
https://github.com/ReactiveX/RxSwift/blob/master/RxSwift/Observables/CombineLatest% Barity.swift#L -L