RAC中的过滤方法

  1. filter
  2. ignore
  3. take
  4. takeLast
  5. takeUntil
  6. distinctUntilChanged
  7. skip
filter
例如:只有文本框内容长度大于5时,才能获取文本框的内容。

[[_textField.rac_textSignal filter:^BOOL(NSString * _Nullable value) {
// 返回值就是过滤条件,只有满足条件才能够获取内容
return (value.length > 5);
}] subscribeNext:^(NSString * _Nullable x) {
NSLog(@”%@”, x);
}];

ignore
忽略一些值(ignore:),忽略所有值(ignoreValues)。

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

take
从开始一共获取N次的信号

RACSubject *subject = [RACSubject subject];
[[subject take:2] subscribeNext:^(id _Nullable x) {
NSLog(@”%@”, x);
}];
[subject sendNext:@”1”];
[subject sendNext:@”2”];
[subject sendNext:@”3”];

takeLast
取最后N次的信号。前提条件:订阅者必须调用完成,因为只有完成,才知道总共有多少信号。

RACSubject *subject = [RACSubject subject];
[[subject takeLast:2] subscribeNext:^(id _Nullable x) {
NSLog(@”%@”, x);
}];
[subject sendNext:@”1”];
[subject sendNext:@”2”];
[subject sendNext:@”3”];
[subject sendCompleted]; // takeLast时,必须调用sendCompleted

takeUntil:(RACSignal*)
只要传入的信号发送完成或者发送任意数据,就不会再接收源信号内容。

RACSubject *subject = [RACSubject subject];
RACSubject *signal = [RACSubject subject];
[[subject takeUntil:signal] subscribeNext:^(id _Nullable x) {
NSLog(@”%@”, x);
}];
[subject sendNext:@”1”];
[subject sendNext:@”2”];
//[signal sendCompleted];
[signal sendNext:@”“];
[subject sendNext:@”3”];

distinctUntilChanged
如果当前的值跟上一个值相同,就不会被订阅到。

RACSubject *subject = [RACSubject subject];
[[subject distinctUntilChanged] subscribeNext:^(id _Nullable x) {
NSLog(@”%@”, x);
}];
[subject sendNext:@”1”];
[subject sendNext:@”1”];
[subject sendNext:@”3”];

skip
跳过几个值。

RACSubject *subject = [RACSubject subject];
[[subject skip:2] subscribeNext:^(id _Nullable x) {
NSLog(@”%@”, x);
}];
[subject sendNext:@”1”];
[subject sendNext:@”1”];
[subject sendNext:@”3”];

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值