ReactiveCocoa(八) 之RAC過濾

- (void)skip {  
    RACSubject *subject = [RACSubject subject];  
    [[subject skip:2] subscribeNext:^(id x) {  
        NSLog(@"%@", x);  
    }];  
    [subject sendNext:@1];  
    [subject sendNext:@2];  
    [subject sendNext:@3];  
}  
  
//distinctUntilChanged:-- 如果當(dāng)前的值跟上一次的值一樣,就不會被訂閱到  
- (void)distinctUntilChanged {  
    RACSubject *subject = [RACSubject subject];  
    [[subject distinctUntilChanged] subscribeNext:^(id x) {  
        NSLog(@"%@", x);  
    }];  
    // 發(fā)送信號  
    [subject sendNext:@1];  
    [subject sendNext:@2];  
    [subject sendNext:@2]; // 不會被訂閱  
}  
  
// take:可以屏蔽一些值,去前面幾個值---這里take為2 則只拿到前兩個值  
- (void)take {  
    RACSubject *subject = [RACSubject subject];  
    [[subject take:2] subscribeNext:^(id x) {  
        NSLog(@"%@", x);  
    }];  
    // 發(fā)送信號  
    [subject sendNext:@1];  
    [subject sendNext:@2];  
    [subject sendNext:@3];  
}  
  
//takeLast:和take的用法一樣,不過他取的是最后的幾個值,如下,則取的是最后兩個值  
//注意點:takeLast 一定要調(diào)用sendCompleted,告訴他發(fā)送完成了,這樣才能取到最后的幾個值  
- (void)takeLast {  
    RACSubject *subject = [RACSubject subject];  
    [[subject takeLast:2] subscribeNext:^(id x) {  
        NSLog(@"%@", x);  
    }];  
    // 發(fā)送信號  
    [subject sendNext:@1];  
    [subject sendNext:@2];  
    [subject sendNext:@3];  
    [subject sendCompleted];  
}  
  
// takeUntil:---給takeUntil傳的是哪個信號,那么當(dāng)這個信號發(fā)送信號或sendCompleted,就不能再接受源信號的內(nèi)容了。  
- (void)takeUntil {  
    RACSubject *subject = [RACSubject subject];  
    RACSubject *subject2 = [RACSubject subject];  
    [[subject takeUntil:subject2] subscribeNext:^(id x) {  
        NSLog(@"%@", x);  
    }];  
    // 發(fā)送信號  
    [subject sendNext:@1];  
    [subject sendNext:@2];  
    [subject2 sendNext:@3];  // 1  
//    [subject2 sendCompleted]; // 或2  
    [subject sendNext:@4];  
}  
  
// ignore: 忽略掉一些值  
- (void)ignore {  
    //ignore:忽略一些值  
    //ignoreValues:表示忽略所有的值  
    // 1.創(chuàng)建信號  
    RACSubject *subject = [RACSubject subject];  
    // 2.忽略一些值  
    RACSignal *ignoreSignal = [subject ignore:@2]; // ignoreValues:表示忽略所有的值  
    // 3.訂閱信號  
    [ignoreSignal subscribeNext:^(id x) {  
        NSLog(@"%@", x);  
    }];  
    // 4.發(fā)送數(shù)據(jù)  
    [subject sendNext:@2];  
  
}  
  
// 一般和文本框一起用,添加過濾條件  
- (void)fliter {  
    // 只有當(dāng)文本框的內(nèi)容長度大于5,才獲取文本框里的內(nèi)容  
    [[self.textField.rac_textSignal filter:^BOOL(id value) {  
        // value 源信號的內(nèi)容  
        return [value length] > 5;  
        // 返回值 就是過濾條件。只有滿足這個條件才能獲取到內(nèi)容  
    }] subscribeNext:^(id x) {  
        NSLog(@"%@", x);  
    }];  
}  

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容