RACStream是RACSignal和RACSequence的父类,定义了一些流的操作方法。从名字上可以看出来,这个对象就像流一样可以往任何一个出口流,同时也可以给这个流设计一道道关卡,改变流(这里的改变,既包括流的内容,也包括融合,也包括流的筛选等等)。
1. RACStream简介
(a)RACStream类中提供两个类方法,+empty 和 +return,第一个是创建一个空的流对象;第二个是创建一个基于方法参数值的一个流。
(b)RACStream类中提供了几个最基本的改变流的方法,-bind,-concat和-zipWith(之后会在RACSignal中对这些进行详细讲解)。第一个方法,是只改变当前流对象的方法;第二个方法是在当前响应流已经完成后,紧接着注入新的响应流;第三个方法,是将不同的流进行打包合成一个流。
(c)在实现了最基本的改变流的方法之后,基于这些改变方法而形成很多更好更方便的改变方法也就出来了,这些方法也都是在RACStream(Operation)这个扩展中。
2. RACStream(Operation)介绍
(a)flattenMap:在bind基础上封装的改变方法,用自己提供的block,改变当前流,变成block返回的流对象。
(b)flatten:在flattenMap基础封装的改变方法,如果当前反应流中的对象也是一个流的话,就可以将当前流变成当前流中的流对象
(c)map:在flattenMap基础上封装的改变方法,在flattenMap中的block中返回的值必须也是流对象,而map则不需要,它是将流中的对象执行block后,用流的return方法将值变成流对象。
(d)mapReplace:在map的基础上封装的改变方法,直接替换当前流中的对象,形成一个新的对象流。
(e)filter:在Map基础上封装的改变封装,过滤掉当前流中不符合要求的对象,将之变为空流
(f)ignore:在filter基础封装的改变方法,忽略和当前值一样的对象,将之变为空流
(g)skip:在bind基础上封装的改变方法,忽略当前流前n次的对象值,将之变为空流
(h)take:在bind基础上封装的改变方法,只区当前流中的前n次对象值,之后将流变为空(不是空流)。
(i)distinctUntilChanged:在bind基础封装的改变方法,当流中后一次的值和前一次的值不同的时候,才会返回当前值的流,否则返回空流(第一次默认被忽略)
(j)takeUntilBlock:在bind基础封装的改变方法,取当前流的对象值,直到当前值满足提供的block,就会将当前流变为空(不是空流)
(k)takeWhileBlock:在bind基础封装的改变方法,取当前流的对象值,直到当前值不满足提供的block,就会将当前流变为空(不是空流)
(l)skipUntilBlock:在bind基础封装的改变方法,忽略当前流的对象值(变为空流),直到当前值满足提供的block。
(m)skipWhileBlock:在bind基础封装的改变方法,忽略当前流的对象值(变为空流),直到当前值不满足提供的block
(n)scanWithStart:reduceWithIndex:在bind基础封装的改变方法,用同样的block执行每次流中的值,并将结果用于后一次执行当中,每次都把block执行后的值变成新的流中的对象。
(o)startWIth:在contact基础上封装的多流之间的顺序方法,在当前流的值流出之前,加入一个初始值
(p)zip:打包多流,将多个流中的值包装成一个RACTuple对象
(q)reduceEach:将流中的RACTuple对象进行过滤,返回特定的衍生出的一个值对象
3. RACStream子类策略
RACStream是RACSignal和RACSequence的父类,但是,RACSignal和RACSequence都自己实现了一套bind,zipWith和contât方法,所以在不同的子类中,RACStream中定义的各种操作对应到各种子类,就会有不同的涵义。
http://blog.csdn.net/chenyin10011991/article/details/51971388