RAC中常見的高級用法-過濾


filter
     過濾信號,使用它可以獲取滿足條件的信號.
- (void)filter
{
    //只有當我們文本框內容長度大於5才想要獲取文本框的內容
    [[_passWord.rac_textSignal filter:^BOOL(id value) {
        //value:源信號的內容
        return [value length] > 5;
        //返回值就是過濾的條件,只有滿足這個條件才能獲取到內容
    }] subscribeNext:^(id x) {
        NSLog(@"%@", x);
    }];
}
 
ignore:
      忽略完某些值的信號.
- (void)ignore
{
    //創建信號
    RACSubject *subject = [RACSubject subject];
    //ignore:忽略一些值
    //ignoreValues:忽略所有值
    RACSignal *ignoreSignal = [subject ignore:@"HMJ"];
//    RACSignal *ignoreSignal = [subject ignoreValues];
    //訂閱信號
    [ignoreSignal subscribeNext:^(id x) {
        NSLog(@"%@", x);
    }];
    //發送信號
    [subject sendNext:@"HMJ"];
    [subject sendNext:@"WGQ"];
}
 
 
distinctUntilChanged:
     當上一次的值和當前的值有明顯的變化就會發出信號,否則會被忽略掉。
     在開發中,刷新UI經常使用,只有兩次數據不一樣才需要刷新
- (void)distinctUntilChanged
{
    //distinctUntilChanged:如果當前的值跟上一個值相同就不會被調用到
    //創建信號
    RACSubject *subject = [RACSubject subject];
    [[subject distinctUntilChanged] subscribeNext:^(id x) {
        NSLog(@"%@", x);
    }];
    [subject sendNext:@"HMJ"];
    [subject sendNext:@"HMJ"];
    [subject sendNext:@"HMJ"];
}
 
take:
     從開始一共取N次的信號
- (void)take
{
    //創建信號
    RACSubject *subject = [RACSubject subject];
    RACSubject *signal = [RACSubject subject];
    //take:取前面幾個值
    //在沒到第三個時就遇到[subject sendCompleted];那么就會停止發送信號
    [[subject take:3] subscribeNext:^(id x) {
        NSLog(@"%@", x);
    }];
    //takeLast:取后面多少個值,必須發送完成
    //只有[subject sendCompleted];才會發送信號
    [[subject takeLast:2] subscribeNext:^(id x) {
        NSLog(@"%@", x);
    }];
    //takeUntil:只要傳入的信號發送完成或者signal發送信號,就不會再接收信號的內容
    [[subject takeUntil:signal] subscribeNext:^(id x) {
        NSLog(@"%@", x);
    }];
    //發送任意數據
    [subject sendNext:@1];
    [subject sendNext:@"HMJ"];
    [subject sendNext:@3];
    [subject sendCompleted];
    [subject sendNext:@4];
    [signal sendNext:@"signal"];
}
 
switchToLatest:
     用於signalOfSignals(信號的信號),有時候信號也會發出信號,會在signalOfSignals中,獲取signalOfSignals發送的最新信號
- (void)switchToLatest
{
    RACSubject *signalOfSignal = [RACSubject subject];
    RACSubject *signal = [RACSubject subject];
    // 獲取信號中信號最近發出信號,訂閱最近發出的信號。
    // 注意switchToLatest:只能用於信號中的信號
    //訂閱信號
    [signalOfSignal.switchToLatest subscribeNext:^(id x) {
        NSLog(@"%@", x);
    }];
    //發送信號
    [signalOfSignal sendNext:signal];
    [signal sendNext:@"signal"];
}
 
skip
跳過幾個信號,不接受
- (void)skip
{
    //skip:跳躍幾個值再接收被訂閱
    //創建信號
    RACSubject *subject = [RACSubject subject];
    [[subject skip:2] subscribeNext:^(id x) {
        NSLog(@"%@", x);
    }];
    [subject sendNext:@"HMJ"];
    [subject sendNext:@"1"];
    [subject sendNext:@"3"];
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM