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


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

     

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

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

    用:CocoaPods导入工程

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

    1. use_frameworks!
    2. pod 'ReactiveCocoa', '~> 4.2.1'

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

    1:监听UITextFiled的输入内容

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

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

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

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

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

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

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

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

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

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

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

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

    [map]

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

    [combineLatest]

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

    [reduce]

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

    [filter]

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

    如有问题可添加我的QQ:1290925041

    还可添加QQ群:234812704(洲洲哥学院)

    欢迎各位一块学习,提高逼格!

    更多消息

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

     
    这里写图片描述
  • 相关阅读:
    TC277的Ovc功能
    three.js——几何体划分顶点添加不同的材质
    Linux和树莓派基础交互
    Java线程池
    AO天鹰优化算法|含源码(元启发式算法)
    Leetcode92. 反转链表 II
    个人博客项目测试报告
    sql添加索引
    初体验:动手搭建“小清新式“、版本控制、持续集成的局域网文档系统
    DGIOT实战教程-监控摄像头接入(v4.6.0)
  • 原文地址:https://blog.csdn.net/whuizhou/article/details/53785018