diff --git a/Cartfile.resolved b/Cartfile.resolved index cb7667324..3e33bc6e7 100644 --- a/Cartfile.resolved +++ b/Cartfile.resolved @@ -1,6 +1,6 @@ github "Quick/Nimble" "v7.0.1" github "Quick/Quick" "v1.1.0" github "ReactiveCocoa/ReactiveObjC" "3.0.0" +github "ReactiveCocoa/ReactiveSwift" "2.0.1" github "antitypical/Result" "3.2.3" github "jspahrsummers/xcconfigs" "3d9d99634cae6d586e272543d527681283b33eb0" -github "ReactiveCocoa/ReactiveSwift" "2.0.0" diff --git a/Carthage/Checkouts/ReactiveSwift b/Carthage/Checkouts/ReactiveSwift index 614757120..b9d5b350a 160000 --- a/Carthage/Checkouts/ReactiveSwift +++ b/Carthage/Checkouts/ReactiveSwift @@ -1 +1 @@ -Subproject commit 614757120eb91a59a7421ad11c48614ca9ac04c0 +Subproject commit b9d5b350a446b85704396ce332a1f9e4960cfc6b diff --git a/ReactiveObjCBridgeTests/ObjectiveCBridgingSpec.swift b/ReactiveObjCBridgeTests/ObjectiveCBridgingSpec.swift index e9986be34..4145e7cfb 100644 --- a/ReactiveObjCBridgeTests/ObjectiveCBridgingSpec.swift +++ b/ReactiveObjCBridgeTests/ObjectiveCBridgingSpec.swift @@ -166,13 +166,14 @@ class ObjectiveCBridgingSpec: QuickSpec { it("should start once per subscription") { var subscriptions = 0 - let producer = SignalProducer { () -> Result in + let producer = SignalProducer { () -> Result in defer { subscriptions += 1 } return .success(subscriptions as NSNumber) } + let racSignal = producer.bridged expect(racSignal.first()) == 0 @@ -563,3 +564,25 @@ class ObjectiveCBridgingSpec: QuickSpec { } } } + +extension SignalProducer where Error == NoError { + /// Create a `SignalProducer` that will attempt the given operation once for + /// each invocation of `start()`. + /// + /// Upon success, the started signal will send the resulting value then + /// complete. Upon failure, the started signal will fail with the error that + /// occurred. + /// + /// - parameters: + /// - action: A closure that returns instance of `Result`. + public init(_ action: @escaping () -> Result) { + self.init { observer, _ in + action().analysis(ifSuccess: { value in + observer.send(value: value) + observer.sendCompleted() + }, ifFailure: { error in + observer.send(error: error) + }) + } + } +}