iOS 链式编程探索(Masonry)
看了几篇关于链式编程的文章,还是理解的不透彻,我想这可能是因为我自己对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
Stay hungry,stay foolish.