看了幾篇關於鏈式編程的文章,仍是理解的不透徹,我想這多是由於我本身對block掌握的不熟練。編程
我已經明白了,因此,和你們分享一下個人理解!若有問題,麻煩你們指出!atom
直接看代碼吧!關鍵的註釋都有。spa
我本身運行過,能夠正常運行!(控制檯代碼)code
#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; }
原創文章,轉載請註明出處!謝謝合做!blog
比較有價值的參考資料:http://www.jianshu.com/p/540711c1a507get