http://www.jianshu.com/p/87ef6720a096
链式编程思想
:是将多个操作(多行代码)通过点号(.)链接在一起成为一句代码,使代码可读性好。a(1).b(2).c(3)
-
链式编程特点
:方法的返回值是block,block必须有返回值(本身对象),block参数(需要操作的值) -
代表
:masonry框架。 -
模仿masonry,写一个加法计算器,练习链式编程思想。
链式编程的好处:按照自己的思路,一次性完成各种操作;
例如,先做加法在做除法。
#import <Foundation/Foundation.h>
@class CaculatorMaker;
@interface NSObject (Caculator)
// block,形参是CaculatorMaker,无返回值
+ (int)makeCaculators:(void (^)(CaculatorMaker *make))block;
@end
#import "NSObject+Caculator.h"
#import "CaculatorMaker.h"
@implementation NSObject (Caculator)
+ (int)makeCaculators:(void (^)(CaculatorMaker *))block
{
CaculatorMaker *maker = [[CaculatorMaker alloc] init];
block(maker);
return maker.result;
}
@interface CaculatorMaker : NSObject
@property (nonatomic, assign) int result;
// 这个add方法,虽然没有明显的形参,但是返回值需要形参,所以在执行add方法时,需要传入一个形参;
// 返回值类型是block,形参是int,返回值是CaculatorMaker
- (CaculatorMaker *(^)(int value))add;
- (CaculatorMaker *(^)(int value))divide;
- (instancetype)init
{
if (self = [super init]) {
_result = 1;
}
return self;
}
- (CaculatorMaker *(^)(int value))add
{
return (^CaculatorMaker *(int xingCan){
_result += xingCan;
return self;
});
}
- (CaculatorMaker *(^)(int))divide
{
return (^CaculatorMaker *(int xingCan){
_result /= xingCan;
return self;
});
}
@end
// 调用
int result = [NSObject makeCaculators:^(CaculatorMaker *make) {
make.add(9).divide(2);// 执行add方法,相当于执行相应的block;
}];
NSLog(@"%d",result);
// 输出
5