RACStream

RACStream是继承自NSObject最基础的类,其它的子类例如RCSignalRACSequence均继承自该类

RACStream作为一个抽象类存在,本身并不提供任何方法的实现,内部方法均为抽象方法,在调用时抛出异常

+ (__kindof RACStream *)empty {
    NSString *reason = [NSString stringWithFormat:@"%@ must be overridden by subclasses", NSStringFromSelector(_cmd)];
    @throw [NSException exceptionWithName:NSInternalInconsistencyException reason:reason userInfo:nil];
}
- (__kindof RACStream *)bind:(RACStreamBindBlock (^)(void))block
// return 根据该value 返回一个RACStream对象
+ (__kindof RACStream *)return:(id)value
- (__kindof RACStream *)concat:(RACStream *)stream
- (__kindof RACStream *)zipWith:(RACStream *)stream

但是在RACStream的Operations分类RACStream (Operations)提供了更丰富的方法

//对信号的值进行map映射
- (__kindof RACStream *)flattenMap:(__kindof RACStream * (^)(id value))block {
    Class class = self.class;

    return [[self bind:^{
        return ^(id value, BOOL *stop) {
            id stream = block(value) ?: [class empty];
            NSCAssert([stream isKindOfClass:RACStream.class], @"Value returned from -flattenMap: is not a stream: %@", stream);

            return stream;
        };
    }] setNameWithFormat:@"[%@] -flattenMap:", self.name];
}
- (__kindof RACStream *)flatten
- (__kindof RACStream *)map:(id (^)(id value))block
- (__kindof RACStream *)mapReplace:(id)object

//根据规则过滤
- (__kindof RACStream *)filter:(BOOL (^)(id value))block
- (__kindof RACStream *)ignore:(id)value

//对RACTuple中每个值进行处理 
- (__kindof RACStream *)reduceEach:(RACReduceBlock)reduceBlock

//将RACStream 前拼上一个新的值
- (__kindof RACStream *)startWith:(id)value

//跳过固定个数的值
- (__kindof RACStream *)skip:(NSUInteger)skipCount
//接收前固定个数的值
- (__kindof RACStream *)take:(NSUInteger)count

//将一组Stream按照block的规则合并为一个  
+ (__kindof RACStream *)join:(id<NSFastEnumeration>)streams block:(RACStream * (^)(id, id))block
+ (__kindof RACStream *)zip:(id<NSFastEnumeration>)streams
+ (__kindof RACStream *)zip:(id<NSFastEnumeration>)streams reduce:(RACGenericReduceBlock)reduceBlock

//一组Stream contact(连接)
+ (__kindof RACStream *)concat:(id<NSFastEnumeration>)streams

//用初始值开始reduce 返回每次block之后的结果
- (__kindof RACStream *)scanWithStart:(id)startingValue reduceWithIndex:(id (^)(id, id, NSUInteger))reduceBlock

//忽略不符合条件的
- (__kindof RACStream *)takeUntilBlock:(BOOL (^)(id x))predicate
- (__kindof RACStream *)takeWhileBlock:(BOOL (^)(id x))predicate

//忽略不符合条件的 直到第一个符合条件的
- (__kindof RACStream *)skipUntilBlock:(BOOL (^)(id x))predicate
- (__kindof RACStream *)skipWhileBlock:(BOOL (^)(id x))predicate

//忽略未改变值的改变
- (__kindof RACStream *)distinctUntilChanged