您的位置:首页 > 移动开发 > IOS开发

iOS 链式编程探索(Masonry)

2016-06-28 16:53 453 查看
看了几篇关于链式编程的文章,还是理解的不透彻,我想这可能是因为我自己对block掌握的不熟练。

我已经明白了,所以,和大家分享一下我的理解!如有问题,麻烦大家指出!

直接看代码吧!关键的注释都有。

我自己运行过,可以正常运行!(控制台代码)

#import <Foundation/Foundation.h>

@class CalculatorMaker;

typedef CalculatorMaker *(^ReturnBlock)(int);

// Class - CalculatorMaker
@interface CalculatorMaker : NSObject

@property (nonatomic, assign) int result;

- (ReturnBlock)add;

@end

@implementation CalculatorMaker

- (ReturnBlock)add{
//add被执行,返回一个用于计算的block
return ^CalculatorMaker *(int x){ //这里的CalculatorMaker *是为了说明问题。日常使用建议用id

self.result += x;
return self; //返回了一个CalculatorMaker *
};
}

@end

// Category - Caculator
@interface NSObject (Caculator)

+ (int)makeCaculators:(void(^)(CalculatorMaker *make))caculatorBlock;

@end

@implementation NSObject (Calculate)

+ (int)makeCaculators:(void(^)(CalculatorMaker *make))caculatorBlock{

CalculatorMaker *maker = [[CalculatorMaker alloc]init];
caculatorBlock(maker);
return maker.result;
}

@end

// main
int main(int argc, const char * argv[]) {
@autoreleasepool {
int result = [NSObject makeCaculators:^(CalculatorMaker *maker){
CalculatorMaker *mk = [[CalculatorMaker alloc]init];
ReturnBlock blc = mk.add;   //blc为add方法执行后返回的block
mk = blc(1);                //执行block后,block返回了一个CalculatorMaker实例
maker.result = mk.add(2).add(3).result;
//因此,可以直接进行链式编程
//mk.add返回了一个block,block(2)返回了一个实例(加入叫obj),这个实例obj执行add,又返回了一个block
//block又执行block(3)后又返回了一个实例
}];
NSLog(@"\nresult = %d",result);

}
return 0;
}


原创文章,转载请注明出处!谢谢合作!

比较有价值的参考资料:http://www.jianshu.com/p/540711c1a507
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: