ReactiveCocoa解析之RACSubject

RACSubject可以作为信号(RACSign)使用同时又能发送信号,同时可以被多次订阅,非常适合触发一个点,多个点响应这样的需求。

RACSubject

和RACSignl一样,三个步骤1.创建信号 2.订阅信号 3.发送信号

    //创建信号
    RACSubject * subject = [RACSubject subject];
    //订阅信号1
    [subject subscribeNext:^(id  _Nullable x) {
        NSLog(@"收到的内容1:%@",x);
    }];
    //订阅信号2
    [subject subscribeNext:^(id  _Nullable x) {
        NSLog(@"收到的内容2:%@",x);
    }];
    //发送信号
    [subject sendNext:@"我是数据"];
//打印:
    //收到的内容1:我是数据
    //收到的内容2:我是数据

源码分析

细心的朋友可能已经发现与RACSinal不同的是RACSubject即作为信号,又作为订阅者发送信号。其实RACSubject是这样的:

Snip20161222_1.png

这样也就不奇怪为什么RACSubject即可作为信号,又可作为订阅者发送信号了吧,其实一个类如果想拥有多个类的功能,可以继承一个类,再遵守多个类的协议,即面向协议思想。
1.RACSubject * subject = [RACSubject subject];创建信号并返回一个空数组。
2.[subject subscribeNext:^(id _Nullable x) {···}];保存Block,并将订阅者加入到1中返回的数组中去。
3.[subject sendNext:@"我是数据"];发送信号时遍历数组中的所有订阅者,并执行订阅者中的block.

运用场景

1.替代delegate
2.触发一点,多点响应的需求

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容