zoukankan      html  css  js  c++  java
  • iOS 开发之 ReactiveCocoa(基础)

    前言

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

    1.ReactiveCocoa简介

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

    ReactiveCocoa结合了几种编程风格:

    前言

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

    1.ReactiveCocoa简介

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

    • ReactiveCocoa结合了几种编程风格:

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

    2.ReactiveCocoa使用

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

    注意点:

    • 该信号默认是一个冷信号,当值改变了,也并不会触发改信号,只有订阅了该信号,才会触发改信号.

    • 订阅信号的方法: subscribeNext:

    //创建一个信号

        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

    • TextField的字符变化

    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的事件的监听

    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);

        }];

    • 手势事件

    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);

        }];

    • KVO

      监听UIScrollView的contentOffset

    UIScrollView *scroller =[[UIScrollView alloc]initWithFrame:CGRectMake(100, 100, 100, 200)];

        [self.view addSubview:scroller];

        [RACObserve(scroller, contentOffset) subscribeNext:^(id x) {

            NSLog(@"%@",x);

        }];

     

  • 相关阅读:
    [转]项目需求范围管理
    JavaScript 王者归来
    [转]大文件上传组件
    [转]使用vs2005自带的sql2005 express
    JS判断Caps Lock
    [转]Web项目管理思考
    [转]JS严格验证身份证
    两分钟用C#搭建IE BHO勾子, 窃取密码
    asp.net性能提升十个方法(Microsoft)
    [转]Asp.net 将js文件打包进dll 方法
  • 原文地址:https://www.cnblogs.com/fengmin/p/5639763.html
Copyright © 2011-2022 走看看