ReactiveCocoa相关ReactiveCocoa研究MVVM. RAC

##iOS开发之ReactiveCocoa(基础)

2016-03-28  本文已影响682人  纳萨立克

iOS开发之ReactiveCocoa(一)

前言

前段时间在看Masonry这个全新的第三方的布局框架的时候,开始了解了链式编程.后来慢慢的又开始了解函数式编程和响应式编程.在这集中的编程思想下,开始接触和研究了ReactiveCocoa这个框架.在很多大神的blog中,都对这个框架有着高度的评价,各种秀自己如何灵活的使用ReactiveCocoa.今天主要就是这个框架的一些自己的学习笔记.

1.ReactiveCocoa简介

ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的新框架.

ReactiveCocoa结合了几种编程风格:

ReactiveCocoa就被开发者们描述为响应式函数编程框架(FRP);使用RAC就不需要考虑调用的顺序,直接考虑结果,使得代码高聚合,方便管理.

2.ReactiveCocoa使用

2.1 RACSiganl(RAC的核心类):信号类 用来数据传递

注意点:

    //创建一个信号
    RACSignal *singal = [RACSignal createSignal:^RACDisposable *(id<RACSubscriber> subscriber) {
       
        //发送一个信号.
        [subscriber sendNext:@"Ricky"];
        //如果不在发送数据,最好发送信号完成,内部会自动调用[RACDisposable disposable]取消订阅信号。
        [subscriber sendCompleted];
        
        
        return [RACDisposable disposableWithBlock:^{
            
            //信号取消
        }];
    }];
    
    
    //订阅信号 ,激活信号
    [singal subscribeNext:^(id x) {
      
        //x : 就是信号发送到数据
        NSLog(@"%@",x);
    }];

2.2 替换Target和Action

    UITextField *textField =[[UITextField alloc]initWithFrame:CGRectMake(100, 100, 100, 40)];
    textField.backgroundColor =[UIColor redColor];
    
    [self.view addSubview:textField];
    
    
    //监听UITextField的输入变化
    [[textField rac_textSignal] subscribeNext:^(id x) {
       
        NSLog(@"%@",x);
    }];
    
    //x就是textfield的text,所以就把id修改成NSString
//    [[textField rac_textSignal] subscribeNext:^(NSString * text) {
//        
//        NSLog(@"%@",text);
//    }];

    UIButton *button =[UIButton buttonWithType:UIButtonTypeCustom];
    
    button.frame = CGRectMake(100, 100, 100, 100);
    button.backgroundColor = [UIColor yellowColor];
    
    [self.view addSubview:button];
    
    [[button rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
       
        //这个x就是button,已经知道了类型就可以把id x 修改成UIButton *button
        NSLog(@"%@",x);
    
    }];
    UITapGestureRecognizer *tap =[[UITapGestureRecognizer alloc]init];
    
    [[tap rac_gestureSignal] subscribeNext:^(id x) {
       
        NSLog(@"%@",x);
    }];
    
    [self.view addGestureRecognizer:tap];

RAC的通知不需要移除,RAC会自己处理改通知的移除


    [[[NSNotificationCenter defaultCenter] rac_addObserverForName:UIApplicationDidEnterBackgroundNotification object:nil] subscribeNext:^(id x) {
        
        NSLog(@"%@",x);
    }];
//延迟一定时间做某事
    [[RACScheduler mainThreadScheduler]afterDelay:2 schedule:^{
       
        NSLog(@"Ricky");
    }];
//每个多长时间调用一次事件    
    [[RACSignal interval:1 onScheduler:[RACScheduler mainThreadScheduler]] subscribeNext:^(id x) {
        
        NSLog(@"%@",x);

    }];
    UIScrollView *scroller =[[UIScrollView alloc]initWithFrame:CGRectMake(100, 100, 100, 200)];
    [self.view addSubview:scroller];
    
    [RACObserve(scroller, contentOffset) subscribeNext:^(id x) {
        
        NSLog(@"%@",x);
    }];

上一篇下一篇

猜你喜欢

热点阅读