首页 > 其他 > 详细

ReactiveCocoa 简单使用

时间:2015-11-22 18:43:23      阅读:290      评论:0      收藏:0      [点我收藏+]
#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];
        }]);
    
}

ReactiveCocoa 简单使用

原文:http://www.cnblogs.com/ToBeFrank/p/4986229.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!