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

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

  • RACSignal源码解析

    RACStream 是 ReactiveCocoa 中的核心概念:信号;RACStream 中有2个子类: RAC...

  • ReactiveObjC - RACStream

    抽象方法 RACStream中的许多定义都是抽象的,没有具体实现,需要由其子类进行实现。 empty 因为RAC中...

  • ReactiveCocoa学习笔记<一> RACSignal 工

    ReactiveCocoa 中最核心的概念之一就是信号RACStream。RACStream中有两个子类——RAC...

  • Rac范型

    RACStream 、RACSignal 、RACSequence typedef RACSequence *...

  • ReactiveCocoa 一 RACStream

    When subclassing RACStream, only the methods in the main ...

  • RAC(二)

    RAC常用方法 (instancetype)flattenMap:(RACStream * (^)(id valu...

  • 个人RAC部分方法记录

    RACSignal (RACStream) concat: 当signalA completed之后 signal...

  • ReactiveCocoa学习之二

    ReactiveCocoa信号(RACStream (Operations)文件中)操作像Swift里面的一些高阶...

  • RAC中的reduceEach

    前面可以看到RAC中的zip和combineLatest最后都会走到reduceEach,这个RACStream中...

网友评论

      本文标题:RACStream

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