您的位置:首页 > 移动开发 > IOS开发

iOS-RAC学习笔记(一)——RACStream

2016-07-20 19:44 351 查看
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中定义的各种操作对应到各种子类,就会有不同的涵义。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios RAC ReactiveCocoa