仿masony的一个加法计算器.

参考了http://www.jianshu.com/p/87ef6720a096
尚未看完,只是想先试着写一写其中的加法计算器.

代码如下

@interface GNCaculatorMaker : NSObject

@property (nonatomic,assign) NSInteger result;

// 提供外界快速创建加法计算器对象并且使用的方法
// 参数是一个带参数的block,block的参数是创建的计算器对象
// 这个方法应该写在本类的分类中
+ (NSInteger)makeCaculate:(void(^)(GNCaculatorMaker *))block;

// 以下方法返回值是一个带返回值的block
// block的返回值是self
// 加
- (GNCaculatorMaker *(^)(NSInteger))add;
// 减
- (GNCaculatorMaker *(^)(NSInteger))sub;

@end
#import "GNCaculatorMaker.h"

@implementation GNCaculatorMaker

// 加法实现
- (GNCaculatorMaker *(^)(NSInteger))add{
    
    return ^GNCaculatorMaker *(NSInteger num){
        
        _result += num;
        
        return self;
    };
}

// 减法实现
- (GNCaculatorMaker *(^)(NSInteger))sub{
    
    return ^GNCaculatorMaker *(NSInteger num){
        
        _result -= num;
        
        return self;
    };
}

// 提供给外界直接使用的方法.方便快捷的创建计算器对象,并且进行计算.
+ (NSInteger)makeCaculate:(void (^)(GNCaculatorMaker *))block{
    
    if (block) {
        // 创建计算器对象
        GNCaculatorMaker *maker = [[GNCaculatorMaker alloc]init];
        // 调用block,并且把计算器对象传入,以供外界使用.
        block(maker);
        // 返回最终结果
        return maker.result;
    }
    return 0;
}

@end

调用结果

    NSInteger result = [GNCaculatorMaker makeCaculate:^(GNCaculatorMaker *maker) {

        // 调用add方法以后,返回值是一个block. maker.add 此时相当于一个block  即 maker.add 相当于 block
        // 于是在直接调用这个block maker.add(10) 相当于 oneBlock(10)
        // 由于block的返回值是一个计算器对象,所以可以继续调用计算器的其他方法.
        maker.add(10).sub(10).add(10);
        
    }];
    
    NSLog(@"%zd",result);
    // 结果为10;

Demo github地址
https://github.com/coderAs7/_as7

你可能感兴趣的:(仿masony的一个加法计算器.)