ReactiveObjc 初体验

ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架。RAC结合了函数式编程(Functional Programming)和响应式编程(React Programming)的框架,也可称其为函数响应式编程(FRP)框架 。

  • 作用

RAC最大的优点是 提供了一个单一的、统一的方法去处理异步的行为,包括 Delegate,Blocks Callbacks,Target-Action机制,Notifications和KVO。

它最大的与众不同是提供了一种新的写代码的思维,由于RAC将Cocoa中KVO、UIKit Event、Delegate、Selector等都增加了RAC支持,所以都不用去做很多跨函数的事,而且利用RAC处理事件很方便,可以把要处理的事情,和监听的事情的代码放在一起,这样非常方便我们管理,就不需要跳到对应的方法里。非常符合我们开发中高聚合,低耦合的思想。

  • 核心

ReactiveCocoa核心就是RACSignal。RACSignal (信号)对于 RAC 来说是构造单元。它代表我们最终将要收到的信息,表示将来有数据传递,只要有数据改变,信号内部接收到数据,就会马上发出数据,所以你可以开始预先(陈述性)运用逻辑并构建你的信息流,而不是必须等到事件发生(命令式)。

信号会为了控制通过应用的信息流而获得所有这些异步方法(委托, 回调 block,通知,KVO, target/action 事件观察等)并将它们统一到一个接口下。不仅是这些,因为信息会流过你的应用, 它还提供给你轻松转换/分解/合并/过滤信息的能力。

1.简单使用
// 1. 创建信号
    RACSubject *subject = [[RACSubject alloc] init];
    
    // 2. 订阅信号
    [subject subscribeNext:^(id  _Nullable x) {
        NSLog(@"%@",x);
    }];
    
    // 3. 发送信号
    [subject sendNext:@"约么?"];
    
    [[self.tableView rac_signalForSelector:@selector(tableView: didSelectRowAtIndexPath:)] subscribeNext:^(RACTuple * _Nullable x) {
        NSLog(@"%@",x);
    }];

2.view 向controller反向传值

// view向控制器反向传值步骤
    // 1. view里面创建信号
    - (RACSubject *)subject
    {
        if (!_subject) {
            _subject = [RACSubject subject];
        }
        return _subject;
    }
    
    // 2. view里面发送信号
     [_subject sendNext:@"view反向传值给控制器"];
    
    // 3. controller里面订阅信号
    [self.yqView.subject subscribeNext:^(id  _Nullable x) {
        NSLog(@"x=%@",x);
    }];
    // 4.还可以这样写,更简单
[[self.yqView rac_signalForSelector:@selector(btnClick:)] subscribeNext:^(RACTuple * _Nullable x) {
        NSLog(@"%@",x);
    }];

 3. 按钮的target     rac_signalForControlEvents

[[self.btn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) {
        NSLog(@"x=%@",x);
    }];

 4. kvo 

 [self.yqView rac_observeKeyPath:@"frame" options:NSKeyValueObservingOptionNew observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {
        NSLog(@"来了");
    }];

5.通知

// 通知
    [[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardWillShowNotification object:nil] subscribeNext:^(NSNotification * _Nullable x) {
        NSLog(@"x=%@",x);
    }];

6.监听文本框

   [self.textField.rac_textSignal subscribeNext:^(NSString * _Nullable x) {
        NSLog(@"x=%@",x);
    }];
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值