RACStream

2019-04-03  本文已影响0人  boy丿log

RACStream

+ (__kindof RACStream *)empty;

rac为nil会导致崩溃,需要顶一个空对象来替代nil,一般都为单例。如RACEmptySignal、RACEmptySequence

bind

- (__kindof RACStream *)bind:(RACStreamBindBlock (^)(void))block;
- 

懒绑定,将块返回的RACStream绑定到自身,在调用时才执行内部操作。很多操作都是基于绑定的,比如flattwnMap,大多时候我们都调用的绑定的上层方法

return

+ (__kindof RACStream *)return:(id)value;

把一个值包装秤对应的RACStream的子类型

CONCAT

- (__kindof RACStream *)concat:(RACStream *)stream;

连接两个信号,子类实现具体如何连接。

zipWith

- (__kindof RACStream *)zipWith:(RACStream *)stream;

压缩两个信号,子类实现具体如何压缩。


RACStream类中提供了几个最基本的改变流的方法,-bind,-concat和-zipWith(之后会在RACSignal中对这些进行详细讲解)。第一个方法,是只改变当前流对象的方法;第二个方法是在当前响应流已经完成后,紧接着注入新的响应流;第三个方法,是将不同的流进行打包合成一个流。

flattenMap、map、flatten、mapReplace

flattenMap 改变当前steam,用来改变将要返回的值

- (__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];//判断block返回的值是否为空
            NSCAssert([stream isKindOfClass:RACStream.class], @"Value returned from -flattenMap: is not a stream: %@", stream);//如果stram的类型合法返回

            return stream;
        };
    }] setNameWithFormat:@"[%@] -flattenMap:", self.name];
}

flatten 在flattenMap基础封装的改变方法,如果当前反应流中的对象也是一个流的话,就可以将当前流变成当前流中的流对象

- (__kindof RACStream *)flatten {
    return [[self flattenMap:^(id value) {
        return value;
    }] setNameWithFormat:@"[%@] -flatten", self.name];
}
上一篇下一篇

猜你喜欢

热点阅读