最近都失眠,干脆起床写博客!
首先来看看一段代码:
[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);
}];
对,这个就是Objective-C的 点链式语法 ,本文就写写关于点链式语法的实现, 直接上代码:
CalculatorTools.h
@interface CalculatorTools : NSObject
// 计算结果
@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()调试程序错误
NSAssert(num != 0, @"除数不能为零");
self.result /= num;
return self;
};
}
@end
接下来就是调用 :
CalculatorTools *cal = [[CalculatorTools alloc] init];
cal.add(1).minus(2).multiply(3).divide(4);
NSLog(@"result = %ld", cal.result);
可以看出,都是一些对block的运用,在这些block中,返回值都是self本身,当调用的时候,流程是这样的:
首先获得实例中的一个block,然后执行block并返回实例本身,然后再执行实例的另一个block,而在这个block中同样返回实例本身,按此规律通过点语法一直往下执行。
就是这么简单,大家慢慢体会,本文有任何不足之处,欢迎大家不吝指教,一起探讨学习!
参考:
1、[使用断言NSAssert()调试程序错误][http://blog.sina.com.cn/s/blog_75992b660101kbj2.html]
网友评论