2018-02-05 21:36:40.271150>0800 RACtest[958:29805] =======subscribeNext
2018-02-05 21:36:40.271328<0800 RACtest[958:29805] =======执行5
---------------------------------------------------------------
2018-02-05 21:36:40.271509>0800 RACtest[958:29805] =======执行1
2018-02-05 21:36:40.271605<0800 RACtest[958:29805] =======执行5
---------------------------------------------------------------
2018-02-05 21:36:40.271804>0800 RACtest[958:29805] =======执行1
2018-02-05 21:36:40.271981<0800 RACtest[958:29805] subscribeCompleted=======
2018-02-05 21:36:40.272084>0800 RACtest[958:29805] =======执行5
```
• 上面都能实现信号的订阅,但是方法1的 block 会多次 =======执行1和 =======执行5
• RACSubject 先订阅然后可以发送和上一个 RACSignal 完全不同,这个类订阅多次然后发送的时候一起执行订阅者的信息。
```
RACSubject *subject = [RACSubject subject];
[subject subscribeNext:^(id _Nullable x) {
NSLog(@"订阅者1");
}];
[subject subscribeNext:^(id _Nullable x) {
NSLog(@"订阅者2");
}];
[subject sendNext:@1];
```
• 输出打印信息:
```
2018-02-05 21:53:50.012831<0800 RACtest[1044:37676] 订阅者1
2018-02-05 21:53:50.012988>0800 RACtest[1044:37676] 订阅者2
```
• 以上都是先订阅后发送信号
• 下面是一个先发送后订阅的一个类
• RACReplaySubject 继承自 RACSubject
```
RACReplaySubject *reSubject = [RACReplaySubject subject];
[reSubject sendNext:@"====1"];
[reSubject sendNext:@"====2"];
[reSubject subscribeNext:^(id _Nullable x) {
NSLog(@"%@",x);
}];
```
• 输出结果:
```
2018-02-05 21:59:14.855276<0800 RACtest[1076:40729] ====1
2018-02-05 21:59:14.855430>0800 RACtest[1076:40729] ====2
```
• 关于RAC的类 RACSubject 在开发中的应用,可以代替代理,如果有这样一个需求,在VC上点击几个 view 视图 ,每点击一个就执行一次订阅者,还有一个需求就是我点击了 view 点击无论多少次只是执行一次 订阅,对于 RACSubject来说只是你调用 sendNext 和 sendCompleted的选择,感觉特爽,再也不用判断各种状态了;后者只需要调用 sendNext 和 sendCompleted,前者调用 sendNext 就可以实时的获取到状态。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-77250-3.html
以前可以搜到多个系统更新到9
利用中国随处可见的无人居住的鬼城来安置叙利亚难民