RACSignal (RACStream)
- concat:
[[signalA concat:signalB] subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
当signalA completed之后 signalB才能执行。
- zipWith:
[[signalA zipWith:signalB] subscribeNext:^(RACTuple* x) {
RACTupleUnpack(NSString *stringA, NSString *stringB) = x;
NSLog(@"我们是%@%@的", stringA, stringB);
}];
当且仅当signalA和signalB同时都产生了值的时候,一个value才被输出,signalA和signalB只有其中一个有值时会挂起等待另一个的值,所以输出都是一对值(RACTuple)),当signalA和signalB只要一个先completed,RACStream也解散。
distinctUntilChanged
一个相当常用的Filter(但它不是- filter:的衍生方法)
它将这一次的值与上一次做比较,当相同时(也包括- isEqual:)被忽略掉。ignore: (id)
忽略给定的值,注意,这里忽略的既可以是地址相同的对象,也可以是- isEqual:结果相同的值。take: (NSUInteger)
从开始一共取N次的next值,不包括Competion和Error
[[[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@"1"];
[subscriber sendNext:@"2"];
[subscriber sendNext:@"3"];
[subscriber sendCompleted];
return nil;
}] take:2] subscribeNext:^(id x) {
NSLog(@"only 1 and 2 will be print: %@", x);
}];
takeUntil: (RACSignal *)
当给定的signal完成前一直取值,也就是说signal completed之后,就停止取值。
同理 skip:(NSUInteger) and -skipUntil:(RACSignal *)materialize:
materialize会将一个signal转换为RACEvent信号(将一个signal的next:complete和error:消息转换为RACEvent实例的next:的值)
RACSignal (Operations)
throttle:
它接收一个时间间隔interval作为参数,如果Signal发出的next事件之后interval时间内不再发出next事件,那么它返回的Signal会将这个next事件发出。也就是说,这个方法会将发送比较频繁的next事件舍弃,只保留一段“静默”时间之前的那个next事件,这个方法常用于处理输入框等信号(用户打字很快),因为它只保留用户最后输入的文字并返回一个新的Signal,将最后的文字作为next事件参数发出。merge:(id)signals
返回signals当中的最新的next
[[RACSignal merge:@[signalA, signalB]] subscribeNext:^(id x) {
NSLog(@"处理%@",x);
}];
- (RACSignal *)combineLatestWith:(RACSignal *)signal;
返回RACTuples类型的signal
- (RACSignal *)combineLatest:(id<NSFastEnumeration>)signals;
返回a signal
- (RACSignal *)then:(RACSignal * (^)(void))block;
忽略接下来收到的信号值,直接在信号complete之后执行block
+ (RACSignal *)interval:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler;
[[RACSignal interval:1.0f onScheduler:[RACScheduler mainThreadScheduler]] subscribeNext:^(id x) {
// 这就是间隔1秒在主线程执行一次的signal
}];
方法返回一个在X线程(这个看你选择)上间隔X(interval参数)秒执行一次的signal,内部是利用GCD方法实现。
- (RACSignal *)catchTo:(RACSignal *)signal;
当发生errors的时候订阅signal
RACTuple
RACTupleUnpack(NSString *string, NSNumber *num) = [RACTuple tupleWithObjects:@"foo", @5, nil];
NSLog(@"string: %@", string);
NSLog(@"num: %@", num);
/* The above is equivalent to: */
RACTuple *t = [RACTuple tupleWithObjects:@"foo", @5, nil];
NSString *string = t[0];
NSNumber *num = t[1];
NSLog(@"string: %@", string);
NSLog(@"num: %@", num);