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];
}
网友评论