参考了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
网友评论