最近都失眠,干脆起床寫博客!
首先來看看一段代碼:
[self.view1 mas_makeConstraints:^(MASConstraintMaker *make) {
make.left.mas_equalTo(50);
make.right.mas_equalTo(-50);
make.top.mas_equalTo(50);
make.bottom.mas_equalTo(-50);
}];
對(duì),這個(gè)就是Objective-C的 點(diǎn)鏈?zhǔn)秸Z法 ,本文就寫寫關(guān)于點(diǎn)鏈?zhǔn)秸Z法的實(shí)現(xiàn), 直接上代碼:
CalculatorTools.h
@interface CalculatorTools : NSObject
// 計(jì)算結(jié)果
@property (nonatomic, assign) NSInteger result;
// 加法
- (CalculatorTools *(^)(NSInteger num)) add;
// 減法
- (CalculatorTools *(^)(NSInteger num)) minus;
// 乘法
- (CalculatorTools *(^)(NSInteger num)) multiply;
// 除法
- (CalculatorTools *(^)(NSInteger num)) divide;
@end
CalculatorTools.m
@implementation CalculatorTools
- (instancetype) init
{
self != [super init] ;
if ( ! self )
{
return nil;
}
self.result = 0;
return self;
}
- (CalculatorTools *(^)(NSInteger num)) add
{
return ^id(NSInteger num){
self.result += num;
return self;
};
}
- (CalculatorTools *(^)(NSInteger num)) minus
{
return ^id(NSInteger num){
self.result -= num;
return self;
};
}
- (CalculatorTools *(^)(NSInteger num)) multiply
{
return ^id(NSInteger num){
self.result *= num;
return self;
};
}
- (CalculatorTools *(^)(NSInteger num)) divide
{
return ^id(NSInteger num){
// 使用斷言NSAssert()調(diào)試程序錯(cuò)誤
NSAssert(num != 0, @"除數(shù)不能為零");
self.result /= num;
return self;
};
}
@end
接下來就是調(diào)用 :
CalculatorTools *cal = [[CalculatorTools alloc] init];
cal.add(1).minus(2).multiply(3).divide(4);
NSLog(@"result = %ld", cal.result);
可以看出,都是一些對(duì)block的運(yùn)用,在這些block中,返回值都是self本身,當(dāng)調(diào)用的時(shí)候,流程是這樣的:
首先獲得實(shí)例中的一個(gè)block,然后執(zhí)行block并返回實(shí)例本身,然后再執(zhí)行實(shí)例的另一個(gè)block,而在這個(gè)block中同樣返回實(shí)例本身,按此規(guī)律通過點(diǎn)語法一直往下執(zhí)行。
就是這么簡單,大家慢慢體會(huì),本文有任何不足之處,歡迎大家不吝指教,一起探討學(xué)習(xí)!
參考:
1、[使用斷言NSAssert()調(diào)試程序錯(cuò)誤][http://blog.sina.com.cn/s/blog_75992b660101kbj2.html]