RAC学习应用篇--基础应用篇(一)--简单常用场景

只是做个记录,不值一看,but–对于初初初了解RAC的盆友不妨看一下这个demo

1.target事件

   //target
    //传统oc中解决循环引用问题的方法
//    __weak typeof(self) weakS = self;
    //在RAC中的解决方法
    //导入头文件 #import <ReactiveObjC/RACEXTScope.h>
    @weakify(self)
    [[self.btn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(__kindof UIControl * _Nullable x) {
            NSLog(@"x = %@",x);
            //强引用 注意 没有报警告  RAC的坑 循环引用 原来
//            weakS.lab.text = @"hello";
        //现在
        @strongify(self)
        self.lab.text = @"hello";
        }];

2.textField值

    [self.textField.rac_textSignal subscribeNext:^(id x) 
        //textField的值
        NSLog(@"%@",x);
    }];

打印情况1).程序进入 2).textField响应(点击未操作,使其成为第一响应者)这里写图片描述
3).开始输入(值变化)
这里写图片描述
3.通知

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

        NSLog(@"aaa%@, %@",x.object,x.userInfo);

    }];
    //在某个地方post一个“test”通知

4.监听方法
简例:监听视图A中的btnClick:方法和sendMsg:方法
视图A的.m文件

- (IBAction)btnClick:(id)sender {

    [self sendMsg:@"hello Controller"];

}

- (void)sendMsg:(id)msg{


}

监听方法的controller

    //方法1.
        [[view rac_signalForSelector:@selector(btnClick:)] subscribeNext:^(RACTuple * _Nullable x) {
            NSLog(@"监听了btn的点击事件");
            NSLog(@"111 %@",x);
        }];
    //方法2
    [[view rac_signalForSelector:@selector(sendMsg:)]subscribeNext:^(RACTuple * _Nullable x) {
        NSLog(@"%@",x);
    }];

打印结果
这里写图片描述

5.kvo

//1.
      @weakify(self)
    [RACObserve(self.person, name) subscribeNext:^(id  _Nullable x) {
        NSLog(@"x = %@",x);
        @strongify(self)
        //注意强引用的内存泄漏问题
        self.lab.text = x;
    }];
//2.
   [_view rac_observeKeyPath:@"frame" options:NSKeyValueObservingOptionOld|NSKeyValueObservingOptionNew observer:nil block:^(id value, NSDictionary *change, BOOL causedByDealloc, BOOL affectedOnlyLastComponent) {
        NSLog(@"change = %@",change);
    }];
 //3.
    [[_view rac_valuesAndChangesForKeyPath:@"frame" options:NSKeyValueObservingOptionNew observer:nil] subscribeNext:^(RACTwoTuple<id,NSDictionary *> * _Nullable x) {
        NSLog(@"%@",x);
    }];

6.值绑定

    //btn的enabled属性的值 由 tf1 & tf2 的值的长度共同决定
    RAC(self.btn,enabled) = [RACSignal combineLatest:@[_tf1.rac_textSignal,_tf2.rac_textSignal] reduce:^id _Nullable(NSString *name,NSString *pwd){

        return @(name.length && pwd.length);
    }];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值