iOS深入了解ReactiveCocoa的使用(一)

本文首发地址

只要最实用的,不用刨根问底

先说使用ReactiveCocoa对UITextFiled的基本用法。咱下一篇讲讲对UIButton的用法

网上关于这个ReactiveCocoa有好多Blog,有多灵活有多好用。似乎都没有完全的让我们去使用的文章。今天就带大家看看怎么使用。这个ReactiveCocoa对于业界推崇无限高大上的第三方的框架。包括美团,蘑菇街等等app的开发负责人都对他赞不决口。都说大型app都适合用他来做开发。可以基于他的MVVM思想,和信号源的开发。看着外界对他说的神乎其神的,其实也不比羡慕。给我一块学习,
其实看这里也就够用了。

用:CocoaPods导入工程

NOTICE:一定要在你的Podfile的文件里要这样写

use_frameworks!
pod 'ReactiveCocoa', '~> 4.2.1'

[use_frameworks!]一定要写上!!!

1:监听UITextFiled的输入内容

[self.userNameFiled.rac_textSignal subscribeNext:^(id x) {
    NSLog(@"----%@",x);
}];

1.1 监听UITextFiled输入的字符串的长度开始Action

/**监听输入N个字符以后的动作*/
    [[self.userNameFiled.rac_textSignal filter:^BOOL(NSString * value) {
        return value.length > 6;
    }] subscribeNext:^(NSString * value) {
        NSLog(@"----%@",value);
    }];
    
    // 这样写不好啊
    [[self.userNameFiled.rac_textSignal map:^id(NSString * value) {
        return value.length > 6 ? value : @"";
    }] subscribeNext:^(NSString * value) {
        NSLog(@"----%@",value);
    }];

2:监听文本输入框的内容控制UIButton的属性

RACSignal * updateTextSignal = [self.userNameFiled.rac_textSignal map:^id(NSString * value) {
    NSLog(@"----length%ld",value.length);
    return (value.length <= 3)? @(NO):@(YES);
}];
RAC(self.submitButton,enabled) = updateTextSignal;
// 也可以这样写
[updateTextSignal subscribeNext:^(NSNumber * value) {
    self.submitButton.enabled = [value boolValue];
}];

3:监听文本输入框的内容控制UITextFiled的背景颜色

RACSignal * updateTextSignal = [self.userNameFiled.rac_textSignal map:^id(NSString * value) {
    NSLog(@"----length%ld",value.length);
    return (value.length <= 3)? [UIColor clearColor]:[UIColor redColor];
}];
RAC(self.userNameFiled,backgroundColor) = updateTextSignal;
/**还可以这样写*/
[updateTextSignal subscribeNext:^(id x) {
    self.userNameFiled.backgroundColor = x;
}];

4:监听多个信号源,控制登陆的UIButton的enabled属性

将多个信号合并起来,并且拿到各个信号的最新的值,必须每个合并的signal至少都有过一次sendNext,才会触发合并的信号

/**监听多个输入文本框,同时控制控件属性*/
    RACSignal * fallInSignal = [RACSignal combineLatest:@[
  self.userNameFiled.rac_textSignal,
  self.userPwdFiled.rac_textSignal
  ] reduce:^(NSString * userName,NSString * pwd) {
    return  @(userName.length > 0 && pwd.length > 0);
 }];
    
RAC(self.submitButton,enabled) = fallInSignal;

总结:
大家注意在每一个UITextfile的都有一个方法rac_textSignal。利用延展,创建了对UITextfiled的信号。在上面的演示方法中,我们看了有几个函数。

1: fileter
2: map
3: subscribeNext
4: RAC(宏)
5:combineLatest
6:reduce

[map]

监听文本框的内容改变,把结构重新映射成一个新值.
使用步骤:
1.传入一个block,类型是返回对象,参数是value
2.value就是源信号的内容,直接拿到源信号的内容做处理
3.把处理好的内容,直接返回就好了,不用包装成信号,返回的值,就是映射的值。

[combineLatest]

将多个信号合并起来,并且拿到各个信号的最新的值,必须每个合并的signal至少都有过一次sendNext,才会触发合并的信号。

[reduce]

用于信号发出的内容是元组,把信号发出元组的值聚合成一个值

[filter]

过滤信号,使用它可以获取满足条件的信号.

如有问题可添加我的QQ:1290925041
还可添加QQ群:234812704(洲洲哥学院)
欢迎各位一块学习,提高逼格!
也可以添加洲洲哥的微信公众号

更多消息

更多信iOS开发信息 请以关注洲洲哥 的微信公众号,不定期有干货推送:

iOS深入了解ReactiveCocoa的使用(一)_第1张图片
这里写图片描述

你可能感兴趣的:(iOS深入了解ReactiveCocoa的使用(一))