热门搜索 :
考研考公
您的当前位置:首页正文

RAC核心操作方法过滤

来源:东饰资讯网

filter

//filter一般用于文本框
//当文本框内容长度大于5才处理
    [[self.filter.rac_textSignal filter:^BOOL(id value) {
        //value:源信号的内容
        return ([value length] > 5);
    }] subscribeNext:^(id x) {
        NSLog(@"%@",x);
    }];

ignore

    //ignore:忽略一些值
    //ignoreValues:忽略所有值
    RACSubject *subject = [RACSubject subject];
    [[subject ignore:@1] subscribeNext:^(id x) {
        NSLog(@"%@",x);
    }];
    [subject sendNext:@1];

take

//take:取前面几个值
//takeLast:取后面多少个值,必须要发送完成
//takeUntil:只要传入信号发送完成或者发送任意的数据,就不会再接收源信号的内容
RACSubject *subject = [RACSubject subject];
    [[subject take:2] subscribeNext:^(id x) {
        NSLog(@"取前面的信号:%@",x);
    }];
    [subject sendNext:@1];
    [subject sendNext:@2];
    [subject sendNext:@3];
    
    RACSubject *subject2 = [RACSubject subject];
    [[subject2 takeLast:2] subscribeNext:^(id x) {
        NSLog(@"取后面的信号:%@",x);
    }];
    [subject2 sendNext:@1];
    [subject2 sendNext:@2];
    [subject2 sendNext:@3];
    [subject2 sendCompleted];
    
    RACSubject *subject3 = [RACSubject subject];
    RACSubject *signal = [RACSubject subject];
    [[subject3 takeUntil:signal]subscribeNext:^(id x) {
        NSLog(@"第三个信号:%@",x);
    }];
    [subject3 sendNext:@1];
//    [signal sendCompleted];
    [signal sendNext:@1];
    //下面信号不会再接收
    [subject3 sendNext:@2];
    [subject3 sendNext:@3];

distinctUntilChanged

//值发生明显变化时才接收信号
RACSubject *subject = [RACSubject subject];
    [[subject distinctUntilChanged]subscribeNext:^(id x) {
        NSLog(@"%@",x);
    }];
    //只会接收一次
    [subject sendNext:@1];
    [subject sendNext:@1];
    [subject sendNext:@1];
    [subject sendNext:@1];

skip

//跳过几个信号
  RACSubject *subject = [RACSubject subject];
    [[subject skip:2]subscribeNext:^(id x) {
        NSLog(@"%@",x);
    }];
    [subject sendNext:@1];
    [subject sendNext:@2];
    [subject sendNext:@3];
Top