- filter
- ignore
- take
- takeLast
- takeUntil
- distinctUntilChanged
- 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”];