RAC中常见的高级用法-过滤

filter

过滤信号,使用它可以获取满足条件的信号.

//只用当文本框的长度大于11才是想要获取的文本的内容

[[self.useNameTextField.rac_textSignal filter:^BOOL(idvalue) {//这里只用返回Yes,才会走下面的方法subscribeNext,返回NO是不会走下面的

// value:源信号的内容

NSString*text = (NSString*)value;

if(text.length>11) {

return YES;

}else{

return NO;

}

//返回值就是过滤的条件,只有满足这个条件才会能够获取到内容

}]

// 订阅信号,满足上面的条件,即可执行这里面的方法

subscribeNext:^(idx) {

NSLog(@"%@",x);

self.passWordTextField.backgroundColor= [UIColor greenColor];

}];

ignore:

忽略完某些值的信号.

//创建信号

RACSubject*signal = [RACSubject subject];

//ignore是忽略一些值

//ignoreVlaues忽略所有的值

RACSignal*ignoreSignal = [signal ignore:@"luobo"];

//RACSignal *ignoreSignal = [signal ignoreValues];

//订阅信号

[ignoreSignal subscribeNext:^(idx) {

NSLog(@"%@",x);

}];

//发送信号

[signal sendNext:@"luobo"];

[signal sendNext:@"crazy"];


distinctUntilChanged:

当上一次的值和当前的值有明显的变化就会发出信号,否则会被忽略掉。

在开发中,刷新UI经常使用,只有两次数据不一样才需要刷新

//创建信号

RACSubject*signal = [RACSubject subject];

//调用方法后订阅信号

[[signal distinctUntilChanged] subscribeNext:^(idx) {

NSLog(@"%@",x);

}];

//相当于上面

//RACSignal *distinSignal = [signal distinctUntilChanged];

//[distinSignal subscribeNext:^(id x) {

//NSLog(@"%@",x);

//

//}];

[signal sendNext:@"luobo"];

[signal sendNext:@"luobo"];

[signal sendNext:@"luobo"];

[signal sendNext:@"luo"];

take:

从开始一共取N次的信号

//创建信号

RACSubject*subject = [RACSubject subject];

RACSubject*signal = [RACSubject subject];

// take是取前面的几个值

//订阅信号

[[subject take:2] subscribeNext:^(idx) {

NSLog(@"%@",x);

}];

// takeLast:去后面的多少个值,必须是发送完的

//只有调用[subject sendCompleted];才会发送信号

[[subject takeLast:2]subscribeNext:^(idx) {

NSLog(@"%@",x);

}];

// takeUntil:只要是传入的信号发送完成或者是signal发送信号,就不会接收信号的内容

[[signal takeUntil:signal] subscribeNext:^(idx) {

NSLog(@"%@",x);

}];

//发送数据

[subject sendNext:@"1"];

[subject sendNext:@"2"];

[subject sendNext:@"3"];

[subject sendCompleted];

[signal sendNext:@"signal"];

- (RACSignal *)rac_textSignal {

@weakify(self);

return[[[[[RACSignal

concat:[self rac_signalForControlEvents:UIControlEventEditingChanged]]

map:^(UITextField *x) {

returnx.text;

}]

takeUntil:self.rac_willDeallocSignal]// bingo!

}

switchToLatest:

用于signalOfSignals(信号的信号),有时候信号也会发出信号,会在signalOfSignals中,获取signalOfSignals发送的最新信号

//创建信号

RACSubject*signalOfSignal = [RACSubjectsubject];

RACSubject*signal = [RACSubjectsubject];

//获取信号中信号最近发出的信号,订阅最近发出的信号

//注意switchToLatest只能用于信号中的信号

[signalOfSignal.switchToLatestsubscribeNext:^(idx) {

NSLog(@"%@",x);

}];

[signalOfSignalsendNext:signal];// 将信号变为信号中的信号

[signalsendNext:@"signal"];


skip

跳过几个信号,不接受

//skip:跳跃几个值再接收被订阅

//创建信号

RACSubject*subject = [RACSubject subject];

[[subjectskip:2] subscribeNext:^(idx) {//跳跃过两个,执行下面的几个

NSLog(@"%@", x);

}];

[subject sendNext:@"LUO"];

[subject sendNext:@"1"];

[subject sendNext:@"3"];

[subject sendNext:@"4"];

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值