个人RAC部分方法记录

2015-12-22  本文已影响1980人  月咏蝴蝶

RACSignal (RACStream)

[[signalA concat:signalB] subscribeNext:^(id x) {
        NSLog(@"%@",x);
}];

当signalA completed之后 signalB才能执行。

[[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也解散。

[[[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); 
}]; 

RACSignal (Operations)

[[RACSignal merge:@[signalA, signalB]] subscribeNext:^(id x) {
    NSLog(@"处理%@",x);
}];
+ (RACSignal *)interval:(NSTimeInterval)interval onScheduler:(RACScheduler *)scheduler;

    [[RACSignal interval:1.0f onScheduler:[RACScheduler mainThreadScheduler]] subscribeNext:^(id x) {
        // 这就是间隔1秒在主线程执行一次的signal
    }];

方法返回一个在X线程(这个看你选择)上间隔X(interval参数)秒执行一次的signal,内部是利用GCD方法实现。

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);
上一篇 下一篇

猜你喜欢

热点阅读