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

 

posted @ 2016-06-28 16:53  Ficow  阅读(254)  评论(0编辑  收藏  举报