From 3d72cb2a7c28431add6ef1290628d799f3f25427 Mon Sep 17 00:00:00 2001 From: yury Date: Wed, 21 Oct 2015 11:12:16 +0300 Subject: [PATCH] Merge Sink classes --- .../Implementations/WithLatestFrom.swift | 41 ++++++++----------- 1 file changed, 16 insertions(+), 25 deletions(-) diff --git a/RxSwift/Observables/Implementations/WithLatestFrom.swift b/RxSwift/Observables/Implementations/WithLatestFrom.swift index f0c68abd..4b82755d 100644 --- a/RxSwift/Observables/Implementations/WithLatestFrom.swift +++ b/RxSwift/Observables/Implementations/WithLatestFrom.swift @@ -8,10 +8,11 @@ import Foundation -class WithLatestFromSink : Sink { +class WithLatestFromSink : Sink, ObserverType { typealias Parent = WithLatestFrom typealias SecondType = SecondO.E + typealias E = FirstO.E private let _parent: Parent @@ -27,45 +28,33 @@ class WithLatestFromSink Disposable { let sndSubscription = SingleAssignmentDisposable() - let fstO = WithLatestFromFirst(parent: self) let sndO = WithLatestFromSecond(parent: self, disposable: sndSubscription) - let fstSubscription = _parent._first.subscribeSafe(fstO) + let fstSubscription = _parent._first.subscribeSafe(self) sndSubscription.disposable = _parent._second.subscribeSafe(sndO) return StableCompositeDisposable.create(fstSubscription, sndSubscription) } -} - -class WithLatestFromFirst: ObserverType { - typealias Parent = WithLatestFromSink - typealias E = FirstO.E - private let _parent: Parent - - init(parent: Parent) { - _parent = parent - } - func on(event: Event) { - _parent._lock.performLocked { + _lock.performLocked { switch event { case let .Next(value): - guard let latest = _parent._latest else { return } + guard let latest = _latest else { return } do { - let res = try _parent._parent._resultSelector(value, latest) + let res = try _parent._resultSelector(value, latest) - _parent.observer?.onNext(res) + observer?.onNext(res) } catch let e { - _parent.observer?.onError(e) - _parent.dispose() + observer?.onError(e) + dispose() } case .Completed: - _parent.observer?.onComplete() - _parent.dispose() + observer?.onComplete() + dispose() case let .Error(error): - _parent.observer?.onError(error) - _parent.dispose() + observer?.onError(error) + dispose() } } } @@ -87,7 +76,9 @@ class WithLatestFromSecond) { switch event { case let .Next(value): - _parent._latest = value + _parent._lock.performLocked { + _parent._latest = value + } case .Completed: _disposable.dispose() case let .Error(error):