iOS ReactiveCocoa (2)信号的订阅、取消订阅、接收
iOS ReactiveCocoa (2)信号的订阅、取消订阅、接收
魔笛GNR 发表于1年前
iOS ReactiveCocoa (2)信号的订阅、取消订阅、接收
  • 发表于 1年前
  • 阅读 175
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

摘要: 这节介绍,RAC中对信号的订阅、取消订阅、以及信号的接收。

订阅信号及接收

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

共有 人打赏支持
粉丝 7
博文 73
码字总数 36902
×
魔笛GNR
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: