ReactiveCocoa之RAC过滤(八)

来源:互联网 发布:大数据对零售业 编辑:程序博客网 时间:2024/06/01 10:02
  1. - (void)skip {  
  2.     RACSubject *subject = [RACSubject subject];  
  3.     [[subject skip:2] subscribeNext:^(id x) {  
  4.         NSLog(@"%@", x);  
  5.     }];  
  6.     [subject sendNext:@1];  
  7.     [subject sendNext:@2];  
  8.     [subject sendNext:@3];  
  9. }  
  10.   
  11. //distinctUntilChanged:-- 如果当前的值跟上一次的值一样,就不会被订阅到  
  12. - (void)distinctUntilChanged {  
  13.     RACSubject *subject = [RACSubject subject];  
  14.     [[subject distinctUntilChanged] subscribeNext:^(id x) {  
  15.         NSLog(@"%@", x);  
  16.     }];  
  17.     // 发送信号  
  18.     [subject sendNext:@1];  
  19.     [subject sendNext:@2];  
  20.     [subject sendNext:@2]; // 不会被订阅  
  21. }  
  22.   
  23. // take:可以屏蔽一些值,去前面几个值---这里take为2 则只拿到前两个值  
  24. - (void)take {  
  25.     RACSubject *subject = [RACSubject subject];  
  26.     [[subject take:2] subscribeNext:^(id x) {  
  27.         NSLog(@"%@", x);  
  28.     }];  
  29.     // 发送信号  
  30.     [subject sendNext:@1];  
  31.     [subject sendNext:@2];  
  32.     [subject sendNext:@3];  
  33. }  
  34.   
  35. //takeLast:和take的用法一样,不过他取的是最后的几个值,如下,则取的是最后两个值  
  36. //注意点:takeLast 一定要调用sendCompleted,告诉他发送完成了,这样才能取到最后的几个值  
  37. - (void)takeLast {  
  38.     RACSubject *subject = [RACSubject subject];  
  39.     [[subject takeLast:2] subscribeNext:^(id x) {  
  40.         NSLog(@"%@", x);  
  41.     }];  
  42.     // 发送信号  
  43.     [subject sendNext:@1];  
  44.     [subject sendNext:@2];  
  45.     [subject sendNext:@3];  
  46.     [subject sendCompleted];  
  47. }  
  48.   
  49. // takeUntil:---给takeUntil传的是哪个信号,那么当这个信号发送信号或sendCompleted,就不能再接受源信号的内容了。  
  50. - (void)takeUntil {  
  51.     RACSubject *subject = [RACSubject subject];  
  52.     RACSubject *subject2 = [RACSubject subject];  
  53.     [[subject takeUntil:subject2] subscribeNext:^(id x) {  
  54.         NSLog(@"%@", x);  
  55.     }];  
  56.     // 发送信号  
  57.     [subject sendNext:@1];  
  58.     [subject sendNext:@2];  
  59.     [subject2 sendNext:@3];  // 1  
  60. //    [subject2 sendCompleted]; // 或2  
  61.     [subject sendNext:@4];  
  62. }  
  63.   
  64. // ignore: 忽略掉一些值  
  65. - (void)ignore {  
  66.     //ignore:忽略一些值  
  67.     //ignoreValues:表示忽略所有的值  
  68.     // 1.创建信号  
  69.     RACSubject *subject = [RACSubject subject];  
  70.     // 2.忽略一些值  
  71.     RACSignal *ignoreSignal = [subject ignore:@2]; // ignoreValues:表示忽略所有的值  
  72.     // 3.订阅信号  
  73.     [ignoreSignal subscribeNext:^(id x) {  
  74.         NSLog(@"%@", x);  
  75.     }];  
  76.     // 4.发送数据  
  77.     [subject sendNext:@2];  
  78.   
  79. }  
  80.   
  81. // 一般和文本框一起用,添加过滤条件  
  82. - (void)fliter {  
  83.     // 只有当文本框的内容长度大于5,才获取文本框里的内容  
  84.     [[self.textField.rac_textSignal filter:^BOOL(id value) {  
  85.         // value 源信号的内容  
  86.         return [value length] > 5;  
  87.         // 返回值 就是过滤条件。只有满足这个条件才能获取到内容  
  88.     }] subscribeNext:^(id x) {  
  89.         NSLog(@"%@", x);  
  90.     }];  
  91. }  

0 0
原创粉丝点击