reactiveCocoa实践四(过滤)

一 满足条件才能拿到值
- ( void )filter
{
   
// 只有当我们文本框的内容长度大于 5, 才想要获取文本框的内容
    [[_textField.rac_textSignal filter:^
BOOL ( id value) {
       
// value: 源信号的内容
       
return   [value length] > 5;
       
// 返回值 , 就是过滤条件 , 只有满足这个条件 , 才能能获取到内容
       
    }] subscribeNext:^(
id x) {
       
        NSLog(
@"%@" ,x);
    }];
}




二 忽略一些发送的值
- ( void )ignore
{
   
   
// ignore: 忽略一些值
   
// ignoreValues: 忽略所有的值
   
   
// 1. 创建信号
    RACSubject *subject = [RACSubject subject];
   
    // 2. 忽略一些
    RACSignal *ignoreSignal = [subject ignoreValues];   // [subject ignore: @“1”]
   
   
// 3. 订阅信号
    [ignoreSignal subscribeNext:^(
id x) {
        NSLog(
@"%@" ,x);
    }];
   
   
// 4. 发送数据
    [subject sendNext:
@"13" ];
    [subject sendNext:
@"2" ];
    [subject sendNext:
@"44" ];

}


三 节选取得发送信号
- ( void )take
{
   
// 1. 创建信号
    RACSubject *subject = [RACSubject subject];
   
    RACSubject *signal = [RACSubject subject];
   
   
// take: 取前面几个值
    // takeLast: 取后面多少个值 . 必须要发送完成( [signal sendCompleted])
    // takeUntil: 只要传入信号发送完成或者发送任意数据( [signal sendNext:@1];    [signal sendCompleted]; ) 就不能在接收源信号的内容
    [[subject takeUntil:signal] subscribeNext:^( id x) {
        NSLog(@"%@",x);
    }];   //[subject takeLast:2]   [subject take:2] 
   
    [subject sendNext:
@"1" ];
   
   
//    [signal sendNext:@1];
   
//    [signal sendCompleted];   
    [signal sendError:
nil ];
   
    [subject sendNext:
@"2" ];
    [subject sendNext:
@"3" ];

}


四 发送信号的值不同才能被接收到(开发中使用:相同数据UI不做处理)
- ( void )distinctUntilChanged
{
   
// distinctUntilChanged: 如果当前的值跟上一个值相同 , 就不会被订阅到
   
   
// 1. 创建信号
    RACSubject *subject = [RACSubject subject];
   
    [[subject distinctUntilChanged] subscribeNext:^(
id x) {
        NSLog(
@"%@" ,x);
    }];
   
    [subject sendNext:
@"1" ];
    [subject sendNext:
@"2" ];
    [subject sendNext:
@"2" ];
}


五 忽略前几个信号(应用:服务器返回的前几个数据没用)
  // skip; 跳跃几个值
   
// 1. 创建信号
    RACSubject *subject = [RACSubject subject];
   
    [[subject skip:2] subscribeNext:^(
id x) {
      
        NSLog(
@"%@" ,x);
    }];
   
    [subject sendNext:
@"1" ];
    [subject sendNext:
@"2" ];
    [subject sendNext:@"3"];

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值