RACStream

作者: boy丿log | 来源:发表于2019-04-03 16:16 被阅读0次

    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];
    }
    

    相关文章

      网友评论

          本文标题:RACStream

          本文链接:https://www.haomeiwen.com/subject/wnuzbqtx.html