ReactiveCocoa(RAC)
好处:代码高聚合,方便我们管理;
链式编程:
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)的更多相关文章
- IOS响应式编程框架ReactiveCocoa(RAC)使用示例
ReactiveCocoa是响应式编程(FRP)在iOS中的一个实现框架,它的开源地址为:https://github.com/ReactiveCocoa/ReactiveCocoa# :在网上看了几 ...
- IOS响应式编程框架ReactiveCocoa(RAC)使用示例-备
ReactiveCocoa是响应式编程(FRP)在IOS中的一个实现框架,它的开源地址为:https://github.com/ReactiveCocoa/ReactiveCocoa# :在网上看了几 ...
- iOS ReactiveCocoa(RAC)学习详解
概述: ReactiveCocoa(简称为RAC),是由Github开源的一个应用于iOS和OS开发的一个框架,有时间,自己也了解学习了一下这个框架的一些基本的应用,其实你要学的话网上是有很多很多的博 ...
- ReactiveCocoa 和 MVVM 入门 (转)
翻译自ReactiveCocoa and MVVM, an Introduction. 文中引用的 Gist 可能无法显示.为了和谐社会, 请科学上网. MVC 任何一个正经开发过一阵子软件的人都熟悉 ...
- 【长篇高能】ReactiveCocoa 和 MVVM 入门
翻译自ReactiveCocoa and MVVM, an Introduction. 文中引用的 Gist 可能无法显示.为了和谐社会, 请科学上网. MVC 任何一个正经开发过一阵子软件的人都熟悉 ...
- 【转】伟大的RAC和MVVM入门(一)
原文:http://www.sprynthesis.com/2014/12/06/reactivecocoa-mvvm-introduction/ 翻译自ReactiveCocoa and MVV ...
- [iOS] 响应式编程开发-ReactiveCocoa(一)
什么是响应式编程 响应式编程是一种面向数据流和变化传播的编程范式.这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播. 例如,在命令式编程环境中 ...
- MVVM设计模式加RAC响应式编程
一:为什么要用MVVM? 为什么要用MVVM?只是因为它不会让我时常懵逼. 每次做完项目过后,都会被自己庞大的ViewController代码吓坏,不管是什么网络请求.networking data ...
- 函数响应式编程(FRP)框架--ReactiveCocoa
由于工作原因,有段时间没更新博客了,甚是抱歉,只是,从今天開始我又活跃起来了,哈哈,于是决定每周更新一博.大家互相学习.交流. 今天呢.讨论一下关于ReactiveCocoa,这个採用函数响应式编程( ...
随机推荐
- Sharepoint 2013 回收站知识整理
回收站机制可有利于防止内容的永久删除与误删除. 一.SharePoint 2013 回收站包括两种:第一回收站(End user Recycle Bin items)与 第二回收站(Deleted f ...
- Mysql VARCHAR(X) vs TEXT
一般情况下,我们不太会纠结用Varchar或text数据类型. 比如说,我们要存储邮箱,我们自然会用varchar,不会想到用text.而当我们要存储一段话的时候,选了text,感觉varchar也够 ...
- NEC学习 ---- 布局 -三列, 左右定宽,中间自适应
---恢复内容开始--- 这个布局很牛掰, 我觉得学习价值很大. 通过这个的学习, 我发现, 能将简单的事情做好, 就距离成功不远了. 其实布局就是利用所学知识, 活用. 在没看这个之前, 发现自己的 ...
- MySQL常用问题解决方法
Q: # table 损坏 Table 'table_name' is marked as crashed and should be repaired A: 恢复数据表的索引:myisamchk - ...
- JQ中的延迟对象deferred中的promise等的使用
一.什么是deferred对象? 开发网站的过程中,我们经常遇到某些耗时很长的javascript操作.其中,既有异步的操作(比如ajax读取服务器数据),也有同步的操作(比如遍历一个大型数组),它们 ...
- centos 下建用户 shell编程
useradd 用户名 passwd 用户名 cat /etc/passwd 查看用户信息 删除用户 userdel -r 加一个 -r 表示把用户及用户的主目录都删除 su 切换用户 sud ...
- URLRedirector 解决网页上无法访问 google CDN 的问题(fonts、ajax、themes、apis等)
URLRedirector 解决网页上无法访问 google CDN 的问题(fonts.ajax.themes.apis等) 由于某些原因,在访问国外的网站时有时候会特别慢,像 stackoverf ...
- win7系统如何安装SQL Server 2005
Microsoft Windows 7 旗舰版(32位) SQL Server 2005 简体中文开发板 方法/步骤 1 首先为了保证数据库的顺利安装,先启用IIS服务吧!Win7比XP好的一点是 ...
- django使用gmail
POSTED ON 02 JUL 2007 IN DEVELOPMENT DJANGO PYTHON WEBDid a bit of running around today to get Djang ...
- git server服务器搭建
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/00137583770360579 ...