- 链式编程特点:方法的返回值是block,block必须有返回值(本身对象),block参数(需要操作的值)
- 代表:Masonry框架。
- 代表:KVO运用。
函数式编程特点:每个方法必须有返回值(本身对象),把函数或者Block当做参数,block参数(需要操作的值)block返回值(操作结果)
- 代表:ReactiveCocoa。
#import
@class CaculatorMaker;
@interface NSObject (CaculatorMaker)
//计算
+ (int)makeCaculators:(void(^)(CaculatorMaker *make))caculatorMaker;
@end
#import "NSObject+CaculatorMaker.h"
#import "CaculatorMaker.h"
@implementation NSObject (CaculatorMaker)
//计算
+ (int)makeCaculators:(void(^)(CaculatorMaker *make))block
{
CaculatorMaker *mgr = [[CaculatorMaker alloc] init];
block(mgr);
return mgr.iResult;
}
@end
#import
@interface CaculatorMaker : NSObject
@property (nonatomic, assign) int iResult;
//加法
- (CaculatorMaker *(^)(int))add;
//减法
- (CaculatorMaker *(^)(int))sub;
//乘法
- (CaculatorMaker *(^)(int))muilt;
//除法
- (CaculatorMaker *(^)(int))divide;
@end
#import "CaculatorMaker.h"
@implementation CaculatorMaker
- (CaculatorMaker *(^)(int))add
{
return ^(int value)
{
_iResult += value;
return self;
};
}
@end
调用
int iResult = [NSObject makeCaculators:^(CaculatorMaker *make) {
make.add(1).add(2).add(3).divide(2);
}];
分析下这个方法执行过程:
第一步:NSObject 创建了一个block, 这个block里创建了一个CaculatorMaker对象make,并返回出来
第二步:这个对象make调用方法add时,里面持有的属性iResult做了一个加法,并且返回自己,以便可以接下去继续调用方法。
这就是链式编程思想的一个很小但很明了的例子。
@interface Caculator : NSObject
@property(nonatomic,assign) int result;
@property(nonatomic,assign) BOOL isEqule;
- (Caculator *)caculator:(int (^)(int result))caculator;
- (Caculator *)equale:(BOOL (^)(int result))operation;
@end
调用
//计算2*5 == 10
Caculator *c = [[Caculator alloc] init];
BOOL isequal = [[[c caculator:^(int result){
result += 2;
result *= 5;
return 10;
}] equale:^(int result)]{
return result == 10;
}] isEqule];