RAC 学习笔记

作者: 一生信仰 | 来源:发表于2018-04-17 15:51 被阅读1次

ReactiveCocoa 主要由以下四大核心组件构成:
信号源:RACStream 及其子类;
订阅者:RACSubscriber 的实现类及其子类;
调度器:RACScheduler 及其子类;
清洁工:RACDisposable 及其子类。

image

RACSignal

对于一个应用来说,绝大部分的时间都是在等待某些事件的发生或响应某些状态的变化,比如用户的触摸事件、应用进入后台、网络请求成功刷新界面等等,而维护这些状态的变化,常常会使代码变得非常复杂,难以扩展。而 ReactiveCocoa 给出了一种非常好的解决方案,它使用信号来代表这些异步事件,提供了一种统一的方式来处理所有异步的行为,包括代理方法、block 回调、target-action 机制、通知、KVO 等

    //监听代理 Delegate
    [[self rac_signalForSelector:@selector(tableView:didSelectRowAtIndexPath:) fromProtocol:@protocol(UITableViewDelegate)] subscribeNext:^(id x) {
    }];
    //监听属性 KVO
    [[self.textFiled rac_valuesForKeyPath:@"textColor" observer:self] subscribeNext:^(id x) {
        NSLog(@"hasChangedColor");
    }];
    //(RAC宏)
    RAC(self.textFiled,textColor) = [self.textFiled.rac_textSignal map:^id(NSString *value) {
        return value.length>5 ? [UIColor grayColor] : [UIColor blackColor];
    }];
    
    
    //监听通知 Notification
    [[[NSNotificationCenter defaultCenter] rac_addObserverForName:AVAudioSessionRouteChangeNotification object:nil] subscribeNext:^(id x) {
    }];
    
    //按钮点击事件 UIControlEvents
    [[self.loginBtn rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
        NSLog(@"rac_signalForControlEvents");
    }];
    
    //绑定
    RAC(self,userName) = [self.textFiled.rac_textSignal map:^id(NSString *value) {
        return value;
    }];
    
    //多重绑定
    RAC(self.loginBtn,enabled) = [RACSignal  combineLatest:@[self.textFiled.rac_textSignal,self.passwordFiled.rac_textSignal] reduce:^id(NSString *account,NSString *password){
        return @(([account rangeOfString:@"@"].location != NSNotFound)&&(password.length>=6));
    }];

RACSequence

RACSequence 代表的是一个不可变的值的序列,与 RACSignal 不同,它是 pull-driven 类型的流。从严格意义上讲,RACSequence 并不能算作是信号源,因为它并不能像 RACSignal 那样,可以被订阅者订阅,但是它与 RACSignal 之间可以非常方便地进行转换。

   NSArray *strArr = @[@"12312",@"1782312",@"12",@"872462",@"8924632",@"1721@",@"98234@",@"@983845u",@"@92348",@"23@23984"];
    NSArray *filtArray = [[[strArr.rac_sequence filter:^BOOL(NSString *value) {
        return [value hasPrefix:@"1"];
    }] map:^id(NSString *value) {
        return [value stringByAppendingString:@"好"];
    }] array];

参考资料:
ReactiveCocoa v2.5 源码解析之架构总览

相关文章

  • ReactiveCocoa学习笔记整理(一)

    由于近期时间相对宽裕,以及很多朋友询问关于RAC的学习路径以及资料,故而整理一下之前自己学习RAC的学习笔记,供大...

  • ReactiveCocoa & MVVM学习笔记

    网上关于RAC和MVVM的资料非常多,我写这篇主要是因为初学RAC,为自己记个学习笔记。 1. RAC是什么? (...

  • RAC研究学习(一)-- 新手入门,用法介绍

    最近项目在重构,采取MVVM+RAC模式,学习之余做点小笔记。 什么是RAC? 简单的说,RAC就是一个第三方库,...

  • RAC 学习笔记

    ReactiveCocoa 主要由以下四大核心组件构成:信号源:RACStream 及其子类;订阅者:RACSub...

  • RAC学习笔记

    学习RAC时总结的知识点,方便以后复习。想学习的童鞋可以直接翻到最后的“传送门”。原创文章,欢迎转载.转载请注明出...

  • RAC学习笔记

    前言 最近,ReactiveCocoa火的不行,网上各种大牛各种说RAC的优点,早就有学习的想法,一直没有付诸行动...

  • RAC学习笔记

    零、类结构关系 1.RACSubject::RACSignal::RACStream. 2.最基础的东西:创建信号...

  • Reactive Cocoa 学习笔记

    Reactive Cocoa 学习笔记 [TOC] 基本概念 什么是RAC ReacticeCocoa 结合了好几...

  • RAC

    ReactiveCocoa入门 学习RAC小记-适合给新手看的RAC用法总结RAC稍深入-适合新手学习RAC iO...

  • 了解这些,学习RAC不再难

    了解这些,学习RAC不再难 了解这些,学习RAC不再难

网友评论

    本文标题:RAC 学习笔记

    本文链接:https://www.haomeiwen.com/subject/voqpkftx.html