美文网首页
个人RAC部分方法记录

个人RAC部分方法记录

作者: 月咏蝴蝶 | 来源:发表于2015-12-22 14:48 被阅读1980次

    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);
    

    相关文章

      网友评论

          本文标题:个人RAC部分方法记录

          本文链接:https://www.haomeiwen.com/subject/tszmhttx.html