From eac2e7a669798ae2a8708bbcb4b68285989f2ff1 Mon Sep 17 00:00:00 2001 From: Krunoslav Zaher Date: Thu, 13 Aug 2015 23:40:14 +0200 Subject: [PATCH] `trySend` to `?.on` and cleanup for `scan` --- .../Observables/Implementations/Scan.swift | 17 +++++++++-------- .../RxSwift/Observables/Observable+Single.swift | 9 +++------ .../Tests/Observable+SingleTest.swift | 6 +++--- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/RxSwift/RxSwift/Observables/Implementations/Scan.swift b/RxSwift/RxSwift/Observables/Implementations/Scan.swift index cae8341e..2005e3f9 100644 --- a/RxSwift/RxSwift/Observables/Implementations/Scan.swift +++ b/RxSwift/RxSwift/Observables/Implementations/Scan.swift @@ -24,18 +24,19 @@ class ScanSink) { switch event { case .Next(let element): - self.parent.accumulator(self.accumulate, element).map { result -> Void in - self.accumulate = result - trySendNext(observer, result) - }.recover { error in - trySendError(self.observer, error) + do { + self.accumulate = try self.parent.accumulator(self.accumulate, element) + observer?.on(.Next(self.accumulate)) + } + catch let error { + self.observer?.on(.Error(error)) self.dispose() } case .Error(let error): - trySendError(observer, error) + observer?.on(.Error(error)) self.dispose() case .Completed: - trySendCompleted(observer) + observer?.on(.Completed) self.dispose() } } @@ -43,7 +44,7 @@ class ScanSink: Producer { - typealias Accumulator = (Accumulate, Element) -> RxResult + typealias Accumulator = (Accumulate, Element) throws -> Accumulate let source: Observable let seed: Accumulate diff --git a/RxSwift/RxSwift/Observables/Observable+Single.swift b/RxSwift/RxSwift/Observables/Observable+Single.swift index ad3564aa..d0989ed7 100644 --- a/RxSwift/RxSwift/Observables/Observable+Single.swift +++ b/RxSwift/RxSwift/Observables/Observable+Single.swift @@ -115,13 +115,10 @@ extension ObservableType { // scan extension ObservableType { - public func scan(seed: A, accumulator: (A, E) -> A) - -> Observable { - return Scan(source: self.normalize(), seed: seed, accumulator: { success(accumulator($0, $1)) }) - } - - public func scanOrDie(seed: A, accumulator: (A, E) -> RxResult) + + public func scan(seed: A, accumulator: (A, E) throws -> A) -> Observable { return Scan(source: self.normalize(), seed: seed, accumulator: accumulator) } + } \ No newline at end of file diff --git a/RxTests/RxSwiftTests/Tests/Observable+SingleTest.swift b/RxTests/RxSwiftTests/Tests/Observable+SingleTest.swift index 68eed207..546ff476 100644 --- a/RxTests/RxSwiftTests/Tests/Observable+SingleTest.swift +++ b/RxTests/RxSwiftTests/Tests/Observable+SingleTest.swift @@ -908,11 +908,11 @@ extension ObservableSingleTest { let seed = 42 let res = scheduler.start { - xs.scanOrDie(seed) { (a, e) in + xs.scan(seed) { (a, e) in if e == 4 { - return failure(testError) + throw testError } else { - return success(a + e) + return a + e } } }