文档章节

【iOS编程思想】ReactiveCocoa (2)信号的订阅、取消订阅、接收

魔笛GNR
 魔笛GNR
发布于 2016/07/30 18:06
字数 520
阅读 294
收藏 0

订阅信号及接收

1、创建信号(冷信号)

创建信号,需要传入订阅者

//didSubscriber 调用:只要一个信号被订阅就会调用
//didSubscriber 作用:发送数据
RACDisposable * (^didSubscribe)(id <RACSubscriber> subscriber) = ^RACDisposable * (id <RACSubscriber> subscriber) {
    NSLog(@"信号被订阅");
    //3 发送数据
    [subscriber sendNext:@1];
    return nil;
};

//1 创建信号(冷信号)
RACSignal * signal = [RACSignal createSignal:didSubscribe];

2、订阅信号(热信号)

//2 订阅信号(热信号)
[signal subscribeNext:^(id x) {
       
    //nextBlock 调用:只要订阅者发送数据就会调用
    //nextBlock 作用:处理数据,展示到UI上面
        
    //x:信号发送的内容
    NSLog(@"信号发送的内容:%@",x);
        
}];

3、发送信号

这一步,在创建信号时(第一步,穿件订阅者时)已经写好!

运行结果:

取消订阅及接收

1、创建信号

RACSignal * signal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
       
        NSLog(@"信号被订阅");
        //3 发送信号
        [subscriber sendNext:@"123"];
        
        return [RACDisposable disposableWithBlock:^{
            
            //只要信号取消订阅 就会执行这
            //清空资源
            NSLog(@"信号被取消订阅了");
            
        }];
        
}];

2、订阅信号

RACDisposable * disposable = [signal subscribeNext:^(id x) {
        
    NSLog(@"信号发送的内容:%@",x);
}];

3、取消订阅

[disposable dispose];

运行结果:

一个实例:

有一个BlueView,点击其上的按钮,在BlueView类中发送信号,在控制器中接收到信号。

1、BlueView中的信号属性:

@interface BlueView : UIView

@property (nonatomic, strong)RACSubject * btnClickSignal;

@end

懒加载信号属性:

- (RACSubject *)btnClickSignal{
    if (!_btnClickSignal) {
        _btnClickSignal = [RACSubject subject];
    }
    return _btnClickSignal;
}

2、发送信号:

点击按钮事件触发发送信号。

- (IBAction)btnClick:(id)sender{
    NSLog(@"发送了信号");
    //发送信号
    [self.btnClickSignal sendNext:@"我被点击了"];
}

3、在控制器中接收信号:

//接收信号
[_blueView.btnClickSignal subscribeNext:^(id x) {
    NSLog(@"接收到的信号:%@",x);
}];

运行点击按钮,打印结果:

至此我们学习了解了,RAC对信号的订阅、取消订阅、接收等处理。

Github:

https://github.com/ly918/Demos

© 著作权归作者所有

共有 人打赏支持
魔笛GNR
粉丝 6
博文 82
码字总数 43485
作品 0
郑州
iOS工程师
美团客户端响应式框架 - EasyReact

EasyReact 是一款基于响应式编程范式的客户端开发框架,开发者可以使用此框架轻松地解决客户端的异步问题。EasyReact 已在美团和大众点评客户端的部分业务中进行了实践,并且持续迭代了一年多...

匿名
07/23
0
0
iOS开发 MVVM-ReactiveCocoa资料

相对好懂一点的: http://southpeak.github.io/blog/2014/08/02/reactivecocoazhi-nan-%5B%3F%5D-:xin-hao/ http://southpeak.github.io/blog/2014/08/02/reactivecocoazhi-nan-er-:twitters......

神补刀
2015/11/10
0
0
iOS开发,一篇写得非常好的入门级ReactiveCocoa教程(二)

ReactiveCocoa入门教程——第二部分 ReactiveCocoa iOS 翻译 2015-05-20 16:37:16 4710 1 1 本文翻译自RayWenderlich ReactiveCocoa Tutorial – The Definitive Introduction: Part 2/2 Re......

神补刀
2015/10/28
0
0
iOS应用架构谈(二):View层的组织和调用方案(中)

关于MVC、MVVM等一大堆思想 其实这些都是相对通用的思想,万变不离其宗的还是在开篇里面我提到的那三个角色:数据管理者,数据加工者,数据展示者。这些五花八门的思想,不外乎就是制订了一个...

hejunbinlan
2015/08/05
0
0
iOS开发,一篇写得非常好的入门级ReactiveCocoa教程(一)

ReactiveCocoa入门教程——第一部分 ReactiveCocoa iOS 翻译 2015-01-21 18:33:37 9657 6 15 本文翻译自RayWenderlich ReactiveCocoa Tutorial – The Definitive Introduction: Part 1/2 作......

神补刀
2015/10/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

【王阳明心学语录】-001

1.“破山中贼易,破心中贼难。” 2.“夫万事万物之理不外于吾心。” 3.“心即理也。”“心外无理,心外无物,心外无事。” 4.“人心之得其正者即道心;道心之失其正者即人心。” 5.“无...

卯金刀GG
31分钟前
0
0
OSChina 周三乱弹 —— 我们无法成为野兽

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @ _刚刚好: 霸王洗发水这波很骚 手机党少年们想听歌,请使劲儿戳(这里) hahahahahahh @嘻酱:居然忘了喝水。 让你喝可乐的话, 你准忘不了...

小小编辑
53分钟前
1
0
vm GC 日志 配置及查看

-XX:+PrintGCDetails 打印 gc 日志 -XX:+PrintTenuringDistribution 监控晋升分布 -XX:+PrintGCTimeStamps 包含时间戳 -XX:+printGCDateStamps 包含时间 -Xloggc:<filename> 可以将数据保存为......

Canaan_
昨天
0
0
学习设计模式——生成器模式

1. 认识生成器模式 1. 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 2. 组成: Builder:生成器接口,定义创建一个Product对象所需要的各个组件的操作,...

江左煤郎
昨天
0
0
C语言精要(第二章:基本数据类型)

2.1 C语言基本数据类型 在计算机术语中,把⼆进制数中的某⼀位数又称为⼀个⽐特(bit)。⽐特这个单位对于计算机⽽⾔,在度量上是最⼩的单位。除了⽐特之外,还有字节(byte)这个术语。⼀个...

ryanliue
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部