Inherits from NSObject
Declared in RACStream.h
RACStream.m

Overview

An abstract class representing any stream of values.

This class represents a monad, upon which many stream-based operations can be built.

When subclassing RACStream, only the methods in the main @interface body need to be overridden. Operations built on the RACStream primitives.

These methods do not need to be overridden, although subclasses may occasionally gain better performance from doing so. This extension contains functionality to support naming streams for debugging.

Subclasses do not need to override the methods here.

Properties

name

The name of the stream. This is for debugging/human purposes only.

@property (copy) NSString *name

Declared In

RACStream.h

Class Methods

concat:

Returns a stream obtained by concatenating streams in order.

+ (instancetype)concat:(id<NSFastEnumeration>)streams

Declared In

RACStream.h

empty

Returns an empty stream.

+ (instancetype)empty

Declared In

RACStream.h

join:block:

Combines a list of streams using the logic of the given block.

+ (instancetype)join:(id<NSFastEnumeration>)streams block:(RACStream *( ^ ) ( id , id ))block

Discussion

streams - The streams to combine. block - An operator that combines two streams and returns a new one. The returned stream should contain 2-tuples of the streams' combined values.

Returns a combined stream.

Declared In

RACStream+Private.h

return:

Lifts value into the stream monad.

+ (instancetype)return:(id)value

Discussion

Returns a stream containing only the given value.

Declared In

RACStream.h

zip:

Zips the values in the given streams to create RACTuples.

+ (instancetype)zip:(id<NSFastEnumeration>)streams

Discussion

The first value of each stream will be combined, then the second value, and so forth, until at least one of the streams is exhausted.

streams - The streams to combine. These must all be instances of the same concrete class implementing the protocol. If this collection is empty, the returned stream will be empty.

Returns a new stream containing RACTuples of the zipped values from the streams.

Declared In

RACStream.h

zip:reduce:

Zips streams using zip:, then reduces the resulting tuples into a single value using reduceEach:

+ (instancetype)zip:(id<NSFastEnumeration>)streams reduce:(id ( ^ ) ( ))reduceBlock

Discussion

streams - The streams to combine. These must all be instances of the same concrete class implementing the protocol. If this collection is empty, the returned stream will be empty. reduceBlock - The block which reduces the values from all the streams into one value. It must take as many arguments as the number of streams given. Each argument will be an object argument. The return value must be an object. This argument must not be nil.

Example:

[RACStream zip:@[ stringSignal, intSignal ] reduce:^(NSString string, NSNumber number) { return [NSString stringWithFormat:@“%@: %@”, string, number]; }];

Returns a new stream containing the results from each invocation of reduceBlock.

Declared In

RACStream.h

Instance Methods

bind:

Lazily binds a block to the values in the receiver.

- (instancetype)bind:(RACStreamBindBlock ( ^ ) ( void ))block

Discussion

This should only be used if you need to terminate the bind early, or close over some state. flattenMap: is more appropriate for all other cases.

block - A block returning a RACStreamBindBlock. This block will be invoked each time the bound stream is re-evaluated. This block must not be nil or return nil.

Returns a new stream which represents the combined result of all lazy applications of block.

Declared In

RACStream.h

combinePreviousWithStart:reduce:

Combines each previous and current value into one object.

- (instancetype)combinePreviousWithStart:(id)start reduce:(id ( ^ ) ( id previous , id current ))reduceBlock

Discussion

This method is similar to scanWithStart:reduce:, but only ever operates on the previous and current values (instead of the whole stream), and does not pass the return value of reduceBlock into the next invocation of it.

start - The value passed into reduceBlock as previous for the first value. reduceBlock - The block that combines the previous value and the current value to create the reduced value. Cannot be nil.

Examples

  RACSequence *numbers = @[ @1, @2, @3, @4 ].rac_sequence;

  // Contains 1, 3, 5, 7
  RACSequence *sums = [numbers combinePreviousWithStart:@0 reduce:^(NSNumber *previous, NSNumber *next) {
      return @(previous.integerValue + next.integerValue);
  }];

Returns a new stream consisting of the return values from each application of reduceBlock.

Declared In

RACStream.h

concat:

Appends the values of stream to the values in the receiver.

- (instancetype)concat:(RACStream *)stream

Discussion

stream - A stream to concatenate. This must be an instance of the same concrete class as the receiver, and should not be nil.

Returns a new stream representing the receiver followed by stream.

Declared In

RACStream.h

distinctUntilChanged

Returns a stream of values for which -isEqual: returns NO when compared to the previous value.

- (instancetype)distinctUntilChanged

Declared In

RACStream.h

filter:

Filters out values in the receiver that don’t pass the given test.

- (instancetype)filter:(BOOL ( ^ ) ( id value ))block

Discussion

This corresponds to the Where method in Rx.

Returns a new stream with only those values that passed.

Declared In

RACStream.h

flatten

Flattens a stream of streams.

- (instancetype)flatten

Discussion

This corresponds to the Merge method in Rx.

Returns a stream consisting of the combined streams obtained from the receiver.

Declared In

RACStream.h

flattenMap:

Maps block across the values in the receiver and flattens the result.

- (instancetype)flattenMap:(RACStream *( ^ ) ( id value ))block

Discussion

Note that operators applied after -flattenMap: behave differently from operators within -flattenMap:. See the Examples section below.

This corresponds to the SelectMany method in Rx.

block - A block which accepts the values in the receiver and returns a new instance of the receiver’s class. Returning nil from this block is equivalent to returning an empty signal.

Examples

[signal flattenMap:^(id x) { // Logs each time a returned signal completes. return [[RACSignal return:x] logCompleted]; }];

[[signal flattenMap:^(id x) { return [RACSignal return:x]; }] // Logs only once, when all of the signals complete. logCompleted];

Returns a new stream which represents the combined streams resulting from mapping block.

Declared In

RACStream.h

ignore:

Filters out values in the receiver that equal (via -isEqual:) the provided value.

- (instancetype)ignore:(id)value

Discussion

value - The value can be nil, in which case it ignores nil values.

Returns a new stream containing only the values which did not compare equal to value.

Declared In

RACStream.h

map:

Maps block across the values in the receiver.

- (instancetype)map:(id ( ^ ) ( id value ))block

Discussion

This corresponds to the Select method in Rx.

Returns a new stream with the mapped values.

Declared In

RACStream.h

mapReplace:

Replace each value in the receiver with the given object.

- (instancetype)mapReplace:(id)object

Discussion

Returns a new stream which includes the given object once for each value in the receiver.

Declared In

RACStream.h

reduceEach:

Unpacks each RACTuple in the receiver and maps the values to a new value.

- (instancetype)reduceEach:(id ( ^ ) ( ))reduceBlock

Discussion

reduceBlock - The block which reduces each RACTuple’s values into one value. It must take as many arguments as the number of tuple elements to process. Each argument will be an object argument. The return value must be an object. This argument cannot be nil.

Returns a new stream of reduced tuple values.

Declared In

RACStream.h

scanWithStart:reduce:

Combines values in the receiver from left to right using the given block.

- (instancetype)scanWithStart:(id)startingValue reduce:(id ( ^ ) ( id running , id next ))block

Discussion

The algorithm proceeds as follows:

  1. startingValue is passed into the block as the running value, and the first element of the receiver is passed into the block as the next value.
  2. The result of the invocation is added to the returned stream.
  3. The result of the invocation (running) and the next element of the receiver (next) is passed into block.
  4. Steps 2 and 3 are repeated until all values have been processed.

startingValue - The value to be combined with the first element of the receiver. This value may be nil. block - A block that describes how to combine values of the receiver. If the receiver is empty, this block will never be invoked.

Examples

  RACSequence *numbers = @[ @1, @2, @3, @4 ].rac_sequence;

  // Contains 1, 3, 6, 10
  RACSequence *sums = [numbers scanWithStart:@0 reduce:^(NSNumber *sum, NSNumber *next) {
      return @(sum.integerValue + next.integerValue);
  }];

Returns a new stream that consists of each application of block. If the receiver is empty, an empty stream is returned.

Declared In

RACStream.h

setNameWithFormat:

Sets the name of the receiver to the given format string.

- (instancetype)setNameWithFormat:(NSString *)format, ...

Discussion

This is for debugging purposes only, and won’t do anything unless the RAC_DEBUG_SIGNAL_NAMES environment variable is set.

Returns the receiver, for easy method chaining.

Declared In

RACStream.h

skip:

Skips the first skipCount values in the receiver.

- (instancetype)skip:(NSUInteger)skipCount

Discussion

Returns the receiver after skipping the first skipCount values. If skipCount is greater than the number of values in the stream, an empty stream is returned.

Declared In

RACStream.h

skipUntilBlock:

Skips values until the given block returns YES.

- (instancetype)skipUntilBlock:(BOOL ( ^ ) ( id x ))predicate

Discussion

Returns a stream containing the values of the receiver that follow any initial values failing predicate. If predicate never returns YES, an empty stream is returned.

Declared In

RACStream.h

skipWhileBlock:

Skips values until the given block returns NO.

- (instancetype)skipWhileBlock:(BOOL ( ^ ) ( id x ))predicate

Discussion

Returns a stream containing the values of the receiver that follow any initial values passing predicate. If predicate never returns NO, an empty stream is returned.

Declared In

RACStream.h

startWith:

Returns a stream consisting of value, followed by the values in the receiver.

- (instancetype)startWith:(id)value

Declared In

RACStream.h

take:

Returns a stream of the first count values in the receiver. If count is greater than or equal to the number of values in the stream, a stream equivalent to the receiver is returned.

- (instancetype)take:(NSUInteger)count

Declared In

RACStream.h

takeUntilBlock:

Takes values until the given block returns YES.

- (instancetype)takeUntilBlock:(BOOL ( ^ ) ( id x ))predicate

Discussion

Returns a stream of the initial values in the receiver that fail predicate. If predicate never returns YES, a stream equivalent to the receiver is returned.

Declared In

RACStream.h

takeWhileBlock:

Takes values until the given block returns NO.

- (instancetype)takeWhileBlock:(BOOL ( ^ ) ( id x ))predicate

Discussion

Returns a stream of the initial values in the receiver that pass predicate. If predicate never returns NO, a stream equivalent to the receiver is returned.

Declared In

RACStream.h

zipWith:

Zips the values in the receiver with those of the given stream to create RACTuples.

- (instancetype)zipWith:(RACStream *)stream

Discussion

The first value of each stream will be combined, then the second value, and so forth, until at least one of the streams is exhausted.

stream - The stream to zip with. This must be an instance of the same concrete class as the receiver, and should not be nil.

Returns a new stream of RACTuples, representing the zipped values of the two streams.

Declared In

RACStream.h