iOS_ReactiveObjC简单使用

实现在pod中导入

platform :ios,'8.0'

target ‘demo’ do

pod 'ReactiveObjC'

end

这里需要注意,如果是oc和swift同时存在里面要添加use_frameworks!    

我们引入大量第三方时候可能有许多报黄信息,添加 inhibit_all_warnings!可以屏蔽掉提示

 

然后就是在工程中引入#import <ReactiveObjC.h>或#import<ReactiveObjC/ReactiveObjC.h>有哪个引入哪个就可以

1、Textfield监听输入

  /* 监听 TextField 的输入(内容改变就会调用) */
    [[textField rac_textSignal] subscribeNext:^(NSString * _Nullable x) {
        NSLog(@"输入框内容:%@", x);
    }];

2、根据条件输出

  /* 添加监听条件 */

[[textField.rac_textSignal filter:^BOOL(NSString * _Nullable value) {

return value.length==11; // 表示输入手机号是11位 时才会调用下面的 block

}] subscribeNext:^(NSString * _Nullable x) {

NSLog(@"输入框内容:%@", x);

}];

3、button点击事件

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

           NSLog(@"%@ 按钮被点击了", x);
         // x 是 button 按钮对象
    }];

4、根据textfiled决定button是否可以点击(这里只要求两个输入框有内容就可以点击)

RAC(_loginButton, enabled) = [RACSignal combineLatest:@[_username.rac_textSignal, _password.rac_textSignal] reduce:^id _Nullable(NSString * username, NSString * password){

         return @(username.length && password.length);

}];

新的方法使用可能有一些改变

  @weakify(self)
    RAC(_loginButton,enabled) = [RACSignal combineLatest:@[_username,_password] reduce:^id _Nonnull{
    @strongify(self)
        return @(self.username.text.length && self.password.text.length);
    }];

5、监听Notification(不要忘记通知还是需要我们自己去清除,在dealloc中清除。感觉也没省下啥步骤,只是改成block)

[[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIKeyboardDidShowNotification object:nil] subscribeNext:^(NSNotification * _Nullable x) {
     NSLog(@"%@ 键盘弹起", x); // x 是通知对象

}];

6、代替代理方法delegate(比如在view中有个button按钮,存在点击事件)(@selector(btnClick) 也可替换成@selector(btnClick:))

 [[view rac_signalForSelector:@selector(btnClick)] subscribeNext:^(RACTuple * _Nullable x) {
        NSLog(@" view 中的按钮被点击了");
    }];

7、代替KVO监听

 [[view rac_valuesForKeyPath:@"frame" observer:self] subscribeNext:^(id  _Nullable x) {
        
        NSLog(@"属性的改变:%@", x); // x 是监听属性的改变结果
    }];

简写


    [RACObserve(view, frame) subscribeNext:^(id  _Nullable x) {
        
        NSLog(@"属性的改变:%@", x); // x 是监听属性的改变结果
    }];

8、代替NSTimer事件计算器

(1)、 [[[RACSignal interval:2.0f onScheduler:[RACScheduler mainThreadScheduler]]takeUntil:self.rac_willDeallocSignal]subscribeNext:^(NSDate * _Nullable x) {
                  NSLog(@"每2秒跳动一次");
    }];

 (2)、 [[RACScheduler mainThreadScheduler]afterDelay:2.0f schedule:^{
                    NSLog(@"2秒之后执行");
                }];

9、便利字典

/* 遍历字典 */

NSDictionary *dictionary = @{@"key1":@"value1", @"key2":@"value2", @"key3":@"value3"}; [dictionary.rac_sequence.signal subscribeNext:^(RACTuple * _Nullable x) {

           RACTupleUnpack(NSString *key, NSString *value) = x;

           // x 是一个元祖,这个宏能够将 key 和 value 拆开

          NSLog(@"字典内容:%@:%@", key, value);

}];

10、便利数组

/* 遍历数组 */

NSArray *array = @[@"1", @"2", @"3", @"4", @"5"];

[array.rac_sequence.signal subscribeNext:^(id _Nullable x) {

           NSLog(@"数组内容:%@", x);

          // x 可以是任何对象

}];

/* 内容操作 */ NSArray *array = @[@"1", @"2", @"3", @"4", @"5"];

NSArray *newArray = [[array.rac_sequence map:^id _Nullable(id _Nullable value) {

           NSLog(@"数组内容:%@", value);

           return @"0"; // 将所有内容替换为 0

            }] array];

/* 内容快速替换 */

NSArray *array = @[@"1", @"2", @"3", @"4", @"5"];

NSArray *newArray = [[array.rac_sequence mapReplace:@"0"] array]; // 将所有内容替换为 0

后期有时间会做一个登录的demo,这里边只是一些使用方法,如果想知道原理请查找其他人的博客。
 

文章来源:https://www.jianshu.com/p/0845b1a07bfa

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值