ReactiveCocoa介绍与使用(一)

简介

ReactiveCocoa(简称为RAC)被称为函数响应式编程框架FRP(Functional Reactive Programming),是GitHub开源的。

作用

处理编程时的所有事件(Action、delegate、KVO、通知等)同时使代码更加内聚

处理方式

事件包装为信号,订阅者订阅信号,事件发生时通知订阅者

使用

一、RACSignal

执行顺序:创建信号、订阅信号、发送者发送信号、订阅者接收信号

1.导入头文件

2.创建信号

 RACSignal * signal = [RACSignal createSignal:^RACDisposable * _Nullable(id _Nonnull subscriber) {

        [subscriber sendNext:@"123"];//发送者发送信号

        return nil;

    }];

3.订阅信号

[signal subscribeNext:^(id _Nullable x) {

        NSLog(@"%@",x);//订阅者接收到发送者发送的信号

    }];

4.源码解析如下图

5.简写方式

[[RACSignal createSignal:^RACDisposable * _Nullable(id _Nonnull subscriber) {

        [subscriber sendNext:@"123"];//发送信号

        return nil;

    }] subscribeNext:^(id  _Nullable x) {

        NSLog(@"%@",x);//接收到发送者发送的信号

    }];

二、事件处理

1.按钮事件

UIButton * button = [UIButton buttonWithType:(UIButtonTypeCustom)];

    [button setTitle:@"按钮" forState:(UIControlStateNormal)];

    button.frame = CGRectMake(40, 80, 100, 100);

    [self.view addSubview:button];

    [[button rac_signalForControlEvents:(UIControlEventTouchUpInside)] subscribeNext:^(__kindof UIControl * _Nullable x) {

        NSLog(@"按钮点击时,此处实时响应,是将按钮的target事件封装为信号");

    }];


2.TextField实时监听事件

UITextField * textField = [[UITextField alloc] init];

    textField.frame = CGRectMake(10, CGRectGetMaxY(button.frame) + 20, self.view.frame.size.width - 20, 44);

    [self.view addSubview:textField];

    [[textField rac_textSignal] subscribeNext:^(NSString * _Nullable x) {

        NSLog(@"随着键盘的输入,此处可以实时打印键盘的输入值");

    }];


3.通知事件

    [[[NSNotificationCenter defaultCenter] rac_addObserverForName:@"通知名" object:nil] subscribeNext:^(NSNotification * _Nullable x) {

        NSLog(@"接受到通知时的事件响应");

    }];


4.KVO事件

[[self.view rac_valuesAndChangesForKeyPath:@"backgroundColor" options:NSKeyValueObservingOptionNew observer:nil] subscribeNext:^(id x) {

        NSLog(@"x:%@", x);

    }];


代码

文章中的代码都可以在我的GitHub ReactiveDemo找到

下一篇

你可能感兴趣的:(ReactiveCocoa介绍与使用(一))