diff --git a/SwiftSignalKit/Signal_Mapping.swift b/SwiftSignalKit/Signal_Mapping.swift index 6ea8f10fa7..d8a1b3cc5b 100644 --- a/SwiftSignalKit/Signal_Mapping.swift +++ b/SwiftSignalKit/Signal_Mapping.swift @@ -30,6 +30,22 @@ public func filter(_ f: @escaping(T) -> Bool) -> (Signal) -> Signal< } } +public func flatMap(_ f: @escaping (T) -> R?) -> (Signal) -> Signal { + return { signal in + return Signal { subscriber in + return signal.start(next: { next in + if let value = f(next) { + subscriber.putNext(value) + } + }, error: { error in + subscriber.putError(error) + }, completed: { + subscriber.putCompletion() + }) + } + } +} + public func mapError(_ f: @escaping(E) -> R) -> (Signal) -> Signal { return { signal in return Signal { subscriber in