Extensions for ReactiveCocoa that may not fit in the core framework.
New development targets RAC 4/Swift 2/Xcode 7. For RAC 3 support see the 0.5 release.
All Signal
operators are available for SignaProducer
s too via explicit lift
ing.
Applies transform
to values from signal
with non-nil results unwrapped and forwared on the returned signal. This is equivalent to map { … } .filter { $0 != nil } .map { $0! }
but without creating extra intermediate signals.
func filterMap<U>(transform: T -> U?) -> Signal<U, E>
Wraps a signal
in a version that drops Error
events. By default errors are replaced with a Completed
event but Interrupted
can also be specified as replacement
.
func ignoreError(#replacement: Event<T, NoError> = .Completed) -> Signal<T, NoError>
Forwards events from signal
until it terminates or until interval
time passes. This is nearly identical to timeoutWithError
from RAC except any terminating event
can be used for the timeout.
func timeoutAfter(interval: NSTimeInterval, withEvent event: Event<T, E>, onScheduler scheduler: DateSchedulerType) -> Signal<T, E>
Flattens batches of elements sent on signal
into each individual element. The inverse of collect
. Requires signal values to conform to SequenceType
.
func uncollect() -> Signal<T.Generator.Element, E>
Operators specific to SignalProducer
.
Partitions values from producer
into new producer groups based on the key returned from grouping
. Termination events on the original producer are forwarded to each inner producer group.
func groupBy<K: Hashable>(grouping: T -> K) -> SignalProducer<(K, SignalProducer<T, E>), E>
Flexible way to bind CocoaAction
to the press of button. In addition the button will be disabled during the Action
executing. Such behavior is convenient for tasks that require some time, like a download process in the example below.
let downloadAction = Action<UIButton, NSData, NSError> { _ in
let url = NSURL(string: "https://github.com/neilpa/Rex/archive/master.zip")
let request = NSURLRequest(URL: url!)
return NSURLSession.sharedSession().rac_dataWithRequest(request).map { $0.0 }
}
downloadButton.rex_pressed.value = downloadAction.unsafeCocoaAction
Rex is released under the MIT license