好处:代码高聚合,方便我们管理;

链式编程:

CaculatorMaker.h

#import <Foundation/Foundation.h>
#define ADD
#define KVO
@interface CaculatorMaker : NSObject
@property (nonatomic, assign) KVO int result;
// +
- (instancetype)add:(int)num; ADD
- (CaculatorMaker *(^)(int num))add;
// -
// *
- (CaculatorMaker *(^)(int num))multy;
// /
@end

CaculatorMaker.m

#import "CaculatorMaker.h"
@implementation CaculatorMaker
//- (instancetype)add:(int)num
//{
// _result += num;
// return self;
//}
- (CaculatorMaker *(^)(int))multy
{
return ^(int num){
_result *= num;
return self;
};
}
- (CaculatorMaker * (^)(int num))add
{
return ^(int num){
_result += num;
return self;
};
}
@end

NSObject+Caculator.h

#import <Foundation/Foundation.h>
#import "CaculatorMaker.h"
@interface NSObject (Caculator)
// 以后计算都使用这个方法,一调用这个方法就返回结果.
+ (int)makeCaculator:(void(^)(CaculatorMaker *))block;
@end

NSObject+Caculator.m

#import "NSObject+Caculator.h"
#import "CaculatorMaker.h"
@implementation NSObject (Caculator)
+ (int)makeCaculator:(void (^)(CaculatorMaker *))block
{
// 创建计算制造者
CaculatorMaker *maker = [[CaculatorMaker alloc] init];
// 计算
block(maker);
return maker.result;
}
@end
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
// add(1).add(2)
// 1.创建计算制造者
CaculatorMaker *maker = [[CaculatorMaker alloc] init];
// 10 + 20 + 30 + 40
// 链式编程思想: maker.add(10).add(20).add(30).add(40)
// int result = [maker.add(10).add(20).add(30).add(40) result];
// 提供一个没参数的add方法,返回值block
// int reslut = [[[[[maker add:10] add:20] add:30] add:40] result];
// block:使代码高聚合
int result = [NSObject makeCaculator:^(CaculatorMaker *maker) {
// 把所有的计算代码封装到这里
maker.add().add();
maker.add().add();
maker.multy();
}];
NSLog(@"%d",result);
}

// 之前开发中比较习惯,把事情封装到一个方法中,

// 链式编程思想:把要做的事情封装到block,给外界提供一个返回这个Block的方法

// 链式编程思想方法特点:方法返回值必须是block,block参数:放需要操作的内容,block返回值:方法调用者

响应式编程:(类似kvo)

c=a+b;  a或者b改变  直接影响c的值;

函数式响应编程:

把一个操作写成一系列的方法;

ReactiveCocoa(RAC)的更多相关文章

  1. IOS响应式编程框架ReactiveCocoa(RAC)使用示例

    ReactiveCocoa是响应式编程(FRP)在iOS中的一个实现框架,它的开源地址为:https://github.com/ReactiveCocoa/ReactiveCocoa# :在网上看了几 ...

  2. IOS响应式编程框架ReactiveCocoa(RAC)使用示例-备

    ReactiveCocoa是响应式编程(FRP)在IOS中的一个实现框架,它的开源地址为:https://github.com/ReactiveCocoa/ReactiveCocoa# :在网上看了几 ...

  3. iOS ReactiveCocoa(RAC)学习详解

    概述: ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的一个框架,有时间,自己也了解学习了一下这个框架的一些基本的应用,其实你要学的话网上是有很多很多的博 ...

  4. ReactiveCocoa 和 MVVM 入门 (转)

    翻译自ReactiveCocoa and MVVM, an Introduction. 文中引用的 Gist 可能无法显示.为了和谐社会, 请科学上网. MVC 任何一个正经开发过一阵子软件的人都熟悉 ...

  5. 【长篇高能】ReactiveCocoa 和 MVVM 入门

    翻译自ReactiveCocoa and MVVM, an Introduction. 文中引用的 Gist 可能无法显示.为了和谐社会, 请科学上网. MVC 任何一个正经开发过一阵子软件的人都熟悉 ...

  6. 【转】伟大的RAC和MVVM入门(一)

    原文:http://www.sprynthesis.com/2014/12/06/reactivecocoa-mvvm-introduction/   翻译自ReactiveCocoa and MVV ...

  7. [iOS] 响应式编程开发-ReactiveCocoa(一)

    什么是响应式编程 响应式编程是一种面向数据流和变化传播的编程范式.这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播. 例如,在命令式编程环境中 ...

  8. MVVM设计模式加RAC响应式编程

    一:为什么要用MVVM? 为什么要用MVVM?只是因为它不会让我时常懵逼. 每次做完项目过后,都会被自己庞大的ViewController代码吓坏,不管是什么网络请求.networking data ...

  9. 函数响应式编程(FRP)框架--ReactiveCocoa

    由于工作原因,有段时间没更新博客了,甚是抱歉,只是,从今天開始我又活跃起来了,哈哈,于是决定每周更新一博.大家互相学习.交流. 今天呢.讨论一下关于ReactiveCocoa,这个採用函数响应式编程( ...

随机推荐

  1. IOS第八天(7:UITableViewController新浪微博,cell 复用的简单写法优化和cell高度从模型中获取)

    *********** #import "HMViewController.h" #import "HMStatus.h" #import "HMSt ...

  2. fio

    h3.western { font-family: "Liberation Sans", sans-serif; font-size: 14pt } h3.cjk { font-f ...

  3. P4行为模型BMV2依赖关系安装:thrift nanomsg nnpy安装

    由于安装p4factory的步骤需要OF的支持,我需要下载p4的行为模型BMV2: thrift是支持BMV2的软件框架:nanomsg是一个实现了几种"可扩展协议"的高性能通信库 ...

  4. Memcached 笔记与总结(9)Memcached 与 Session

    一.Memcached 存储 Session 由于 Memcached 是分布式的内存对象缓存系统,因此可以用来实现 Session 同步:把 Web 服务器中的内存组合起来,成为一个“内存池”,不管 ...

  5. JSTL标签使用说明

    使用jstl需进行以下操作 a.下载jstl. b.解压jar文件将jstl.jar和standard.jar文件放到项目lib文件夹. c.在需要使用jstl地方引用标签库,比如在jsp页面引用以下 ...

  6. 初步了解JSONP

    一.JSON 与 JSONP JSON是一种基于文本的数据交换方式(数据描述格式),JSONP是一种非官方跨域数据交互协议. ajax的核心是通过XmlHttpRequest获取非本页内容,而json ...

  7. iScroll.js和swiper.js

    最近系统地学习了iScroll.js和swiper.js,感觉它们在移动端特别好用:http://www.360doc.com/content/14/0724/11/16276861_39669990 ...

  8. ubuntu /etc/network/interfaces 中配置虚拟链路

    ubuntu /etc/network/interfaces 中配置虚拟链路 平常做一些关于网络的测试时,像一些需要在二层上运行的功能,一个网卡不足够的情况下,可使用 ip link 工具加一些虚拟的 ...

  9. Java提高篇——通过分析 JDK 源代码研究 Hash 存储机制

    HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,其中 HashMap 是 Map 接口的常用实现类,HashSet 是 Set 接口的常用实 ...

  10. windows下nginx+php简单配置

    Nginx+php运行环境搭建 虽然目前nginx使用很广泛,在大陆主流的互联网站点或多或少会用到这个俄国人开发的小应用(占用资源小).但是我这个土鳖还是第一次自己独立配置,网上资料不少,但是还是遇到 ...