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

        }];

     

  • 相关阅读:
    express中session的基本使用
    MongoDB 索引 和 explain 的使用
    MongoDB 数据库创建删除、表(集合) 创建删除、数据增删改查
    node fs模块
    k30s刷入国际rom
    基于webpack项目的全局变量
    nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory)
    html手写板
    vue常用配置
    vue组件库从创建到发行和使用
  • 原文地址:https://www.cnblogs.com/fengmin/p/5639763.html
Copyright © 2011-2022 走看看