iOS 鏈式編程探索(Masonry)

 

 

看了幾篇關於鏈式編程的文章,仍是理解的不透徹,我想這多是由於我本身對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

相關文章
相關標籤/搜索