您的位置:首页 > Web前端 > React

RAC的进阶了解

2018-04-27 18:31 239 查看

ReactiveCocoa操作思想

运用的是 Hook(钩子) 思想, Hook 是一种用于改变(应用程序接口: 方法)执行结果的技术

Hook 用处: 截获API调用技术

Hook 原理: 在每次调用一个API返回结果之前,先执行自己的方法,改变结果的输出

RAC
开发方式: RAC 中核心开发方式,也是 绑定 ,之前开发方式是 赋值 , 而用RAC开发,应该把重心放在绑定,也就是创建一个对象的时候,就绑定以后想做的事情,而不是等赋值之后再去做事情

ReactivCocoa核心方法 bind

ReactiveCocoa 操作核心方法是bind

ReactiveCocoa组合

concat : 按一定顺序拼接信号,当多个信号发出的时候,有顺序的接收信号。

RACSignal *signalA = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {

[subscriber sendNext:@1];

[subscriber sendCompleted];

return nil;
}];
RACSignal *signalB = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {

[subscriber sendNext:@2];

return nil;
}];

// 把signalA拼接到signalB后,signalA发送完成,signalB才会被激活。
RACSignal *concatSignal = [signalA concat:signalB];

// 以后只需要面对拼接信号开发。
// 订阅拼接的信号,不需要单独订阅signalA,signalB
// 内部会自动订阅。
// 注意:第一个信号必须发送完成,第二个信号才会被激活
[concatSignal subscribeNext:^(id x) {

NSLog(@"%@",x);

}];
```
# ReactiveCocoa 过滤

* 当文本长度大于5 ,才想要获取文本, __filter__ :一般文本框使用

```
[ _textfield.rac_textSignal filter:^BOOL(id value)
{
// value: 源信号的内容
return [value length] > 5
// 返回值,就是过滤条件,只有满足这个条件,才能获取到内容
} subscribeNext:^(id x){

}]

```
* __ignore__ 忽略一些值, __ignoreValue__ 忽略搜有值
* __take__ :可以获取某个信号
*  __takeLast__ : 取后面多少个值, 必须发送完成

RACSubject *subject = [RACSubject subject];
[subject take: 2] subscribeNext:^(id x){

}];
<!-- [subject takeLast: 2] subscribeNext:^(id x){

}]; -->
[subject sendNext:@"1"];
[subject sendNext:@"2"];
<!--[subject sendCompleted];-->

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

* __distinctUntilChanged :__ ,如果当前的值和上一个值相同,就不会被订阅到

```
// 虽然这里发送了很多次但是仍然只会收到一份数据
RACSubject *subject = [RACSubject subject];
[[subject distinctUntilChanged] subscribeNext:^(id x){
NSLog(@"%@", x)
}];
[subject sendNext:@"1"];
[subject sendNext: @"1"];

```

*   __skip__ , 跳过几个信号

```
// 表示输入第一次,不会被监听到,跳过第一次发出的信号
[[_textField.rac_textSignal skip:1] subscribeNext:^(id x) {
NSLog(@"%@",x);
}];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息