代替代理
1 | //代替代理 |
代替KVO
1 | //第一种写法 |
代替通知
通知不需要remove1
2
3
4//监听事件
[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardWillShowNotification object:nil] subscribeNext:^(id x) {
NSLog(@"弹出键盘");
}];
代替输入事件
1 | //监听文本框文字改变 |
map
这里的map是映射的意思,就是创建一个订阅者的映射并且返回数据,具体用法我们来看代码。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16[[self.textFild.rac_textSignal map:^id(id value) {
NSLog(@"%@", value);
return @1;
}] subscribeNext:^(id x) {
NSLog(@"%@", x);
}];
//打印值为
2016-01-05 15:02:15.180 RACStudyTest[1418:57245] 1
2016-01-05 15:02:21.710 RACStudyTest[1418:57245] g
2016-01-05 15:02:21.711 RACStudyTest[1418:57245] 1
2016-01-05 15:02:22.954 RACStudyTest[1418:57245] go
2016-01-05 15:02:22.955 RACStudyTest[1418:57245] 1
2016-01-05 15:02:23.464 RACStudyTest[1418:57245] goo
2016-01-05 15:02:23.464 RACStudyTest[1418:57245] 1
2016-01-05 15:02:23.705 RACStudyTest[1418:57245] good
2016-01-05 15:02:23.705 RACStudyTest[1418:57245] 1
当监听的对象发生改变时map会返回设定的值
take/skip/repeat/delay/throttle/distinctUntilChanged/timeout/ignore关键字
take:获取 只操作前NSInteger个操作
skip:跳过前NSInteger个操作
repeat:重复发送信号
delay:延迟操作 秒单位
throttle:节流操作 秒单位 秒单位内发生变化不操作
distinctUntilChanged:只调用一次
timeout: onScheduler:超时发送error
igone:忽略信号,指定一个任意类型的量(可以是字符串,数组等),当需要发送信号时讲进行判断,若相同则该信号会被忽略发送1
2
3
4
5
6
7
8
9
10
11
12
13
14
15RACSignal *signal = [[RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
[subscriber sendNext:@"1"];
[subscriber sendNext:@"2"];
[subscriber sendNext:@"3"];
[subscriber sendNext:@"4"];
[subscriber sendNext:@"5"];
[subscriber sendCompleted];
return nil;
}] take:2];
[signal subscribeNext:^(id x) {
NSLog(@"%@", x);
}completed:^{
NSLog(@"completed");
}];
相似的还有takeLast takeUntil takeWhileBlock skipWhileBlock skipUntilBlock repeatWhileBlock都可以根据字面意思来理解