ReactiveCocoa 简单使用

#pragma mark 指令

-(void) instructionDemo
{
    //  创建使能信号
    RACSignal * signal = [self.textField.rac_textSignal map:^id(id value) {

        return @([value rangeOfString:@"@"].location != NSNotFound);
    }];

    //  任何时候button被点击就会执行signalBlock,rac_command属性会监控使能信号signal和button的enabled属性
    self.button.rac_command = [[RACCommand alloc]initWithEnabled:signal
                                                     signalBlock:^RACSignal *(id input) {
                                                         NSLog(@"button was pressed");

                                                         return [RACSignal empty];
                                                     }];
    //  [RACSignal empty]
    //  RACCommand的executionSignal管道(pipe)下发出去。这个信号代表button按下时一些任务需要被处理。在这个处理信号没有返回一个‘complete value‘(‘empty ‘会立即返回一个‘complete value‘)之前button将会保持不可用状态.因为这个例子中我们只是打印了一下,所以这里我们只返回一个empty信号

}

#pragma mark 状态推导
-(void) inferStatueDemo;
{

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

    RACSignal * signal = [self.textField.rac_textSignal map:^id(id value) {

        return @([value rangeOfString:@"@"].location != NSNotFound);
    }];

    RAC(self.button, enabled) = signal;

    RAC(self.textField, textColor) = [signal map:^id(id value) {

        if ([value boolValue]) {
            return [UIColor greenColor];
        }
        return  [UIColor redColor];
    }];
}

#pragma mark rac_sequeuece 简单使用
-(void) rac_sequeueceUseDemo
{
    //  使用rac_sequeuece我们能够轻松地将数组转化为一个流
    NSArray *array = @[ @1, @2, @3 ];
    RACSequence * stream = [array rac_sequence];

        //  map是一种映射关系 将stream映射成了新的流
        [stream map:^id (id value){
            return @(pow([value integerValue], 2));
        }];

        //  跟数组一样,流不能包含nil元素
        NSLog(@"%@",[stream array]);

        NSLog(@"%@",[[[array rac_sequence] map:^id(id value) {
            return @(pow([value integerValue], 2));
        }]array]);

    //  如何让一个序列流合并为单个值

        NSLog(@"%@", [[[array rac_sequence] map:^id(id value) {
            return  [value stringValue];
        }] foldLeftWithStart:@"" reduce:^id(id accumulator, id value) {
            return  [accumulator stringByAppendingString:value];
        }]);

}
时间: 2024-10-13 13:14:26

ReactiveCocoa 简单使用的相关文章

iOS ReactiveCocoa简单使用笔记

涉及对象: 两个输入框,一个按钮. 代码功能: 随时监测输入框内容的长度变化,并在输入内容不符合预设要求时,立即改变输入框背景色. 在两个输入框的内容都符合预设要求时,按钮才可用. RACSignal *validField1Signal = [self.field1.rac_textSignal map:^id(NSString *text){ return @([self isValidInput:text]); }]; RAC(self.field1,backgroundColor) =

iOS学习笔记39-ReactiveCocoa入门

一.响应式编程范式FRP FRP,全称为Functional Reactive Programming,是一种响应变化的编程范式,最近几年比较火,大概的理解就像这样: 当a的值或者b的值发生变化时,c的值会自动响应a的值或b的值变化的信号,自动更正自己的值,类似这种编程思想就称为FRP. FRP提供了一种信号机制来实现这样的效果,通过信号来记录值的变化.信号可以被叠加.分割或合并.通过对信号的组合,就不需要去监听某个值或事件. 二.ReactiveCocoa介绍 ReactiveCocoa是gi

ReactiveCocoa / RxSwift 笔记一

原创:转载请注明出处 ReactiveCocoa / RxSwift Native app有很大一部分的时间是在等待事件发生,然后响应事件,比如 1.等待网络请求完成, 2.等待用户的操作, 3.等待某些状态值的改变等等, 等这些事件发生后,再做进一步处理 但是这些等待和响应,并没有一个统一的处理方式.Delegate, Notification, Block, KVO, 常常会不知道该用哪个最合适.有时需要chain或者compose某几个事件,就需要多个状态变量,而状态变量一多,复杂度也就上

ReactiveCocoa 谈谈concat

今天的一个业务流程,业务流程大概就是这样的 1.从CoreData中获取之前的数据 2.更新界面 3.从网络获取数据 4.判断获取结果 5.处理错误判断 6.更新界面 7.判断结果numberOfNews字段 8.现实numberOfNews信息 这种顺序行的处理,正正是ReactiveCocoa的擅长解决的问题,那么问题来了,怎么才能通过Signal,将if else 转换数据,要知道,很多地方都在block里面 这就需要用到flattenMap 和 then 这两个东西 来看看React的玩

Reactivecocoa初级使用

一直听闻ReactiveCocoa(以下简称RAC)的大名,但始终没有使用.最近时间比较空闲就决定研究一下. 在配置RAC时候遇到了一个小麻烦需要说明本人用cocoapods管理第三方框架,于是按照正常流程在终端中 输入pod search ReactiveCocoa,找到搜索结果 于是vim 打开Podfile 录入 pod 'ReactiveCocoa', '~> 3.0.0-alpha.1' 结果cocoapods始终安装不了 原因竟是3.0.0支持的是swift 于是重新录入pod 'R

iOS开发ReactiveCocoa学习笔记(四)

ReactiveCocoa常见操作方法介绍: demo地址:https://github.com/SummerHH/ReactiveCocoa.git p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #008400; min-height: 13.0px }

iOS开发ReactiveCocoa学习笔记(-)

学习 RAC 我们首先要了解 RAC 都有哪些类 RACSignal RACSubject RACSequence RACMulticastConnection RACCommand 在学习的时候写了一个小 demo 来分别介绍每个类的作用,gitHub 地址: https://github.com/SummerHH/ReactiveCocoa.git demo 的目录结构如下 RAC学习起来的特点 学习起来比较难 团队开发的时候需要谨慎使用 团队代码需要不断的评审,保证团队中所有人代码的风格一

ReactiveCocoa学习

ReactiveCocoa常见类 6.1RACSiganl:信号类,一般表示将来有数据传递,只要有数据改变,信号内部接收到数据,就会马上发出数据. 注意: 信号类(RACSiganl),只是表示当数据改变时,信号内部会发出数据,它本身不具备发送信号的能力,而是交给内部一个订阅者去发出. 默认一个信号都是冷信号,也就是值改变了,也不会触发,只有订阅了这个信号,这个信号才会变为热信号,值改变了才会触发. 如何订阅信号:调用信号RACSignal的subscribeNext就能订阅. RACSigan

ReactiveCocoa概念解释篇

1.ReactiveCocoa简介 ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架,Cocoa是苹果整套框架的简称,因此很多苹果框架喜欢以Cocoa结尾. 2.ReactiveCocoa作用 在我们iOS开发过程中,经常会响应某些事件来处理某些业务逻辑,例如按钮的点击,上下拉刷新,网络请求,属性的变化(通过KVO)或者用户位置的变化(通过CoreLocation).但是这些事件都用不同的方式来处理,比如action.delegate.KVO.