一、原理
首先获得实例中的一个block,然后执行block并返回实例本身,然后再执行实例的另一个block,而在这个block中同样返回实例本身,按此规律通过点语法一直往下执行
二、代表库
1、SDAutoLayout 基于frame自动布局方式
2、BabyBluetooth 基于原生CoreBluetooth框架封装的轻量级开源库
3、Masonry 基于原生NSLayoutConstraints约束封装的轻量级开源库
4、等等
三、例子摘自SDAutoLayout部分代码
1、block
typedef SDAutoLayoutModel *(^MarginToView)(id viewOrViewsArray, CGFloat value);
2、类
@interface SDAutoLayoutModel : NSObject
/** 左边到其参照view之间的间距,参数为“(View 或者 view数组, CGFloat)” */
@property (nonatomic, copy, readonly) MarginToView leftSpaceToView;
/** 顶部到其参照view之间的间距,参数为“(View 或者 view数组, CGFloat)” */
...
@end
@implementation SDAutoLayoutModel
- (MarginToView)leftSpaceToView
{
if (!_leftSpaceToView) {
_leftSpaceToView = [self marginToViewblockWithKey:@"left"];
}
return _leftSpaceToView;
}
- (MarginToView)marginToViewblockWithKey:(NSString *)key
{
__weak typeof(self) weakSelf = self;
return ^(id viewOrViewsArray, CGFloat value) {
SDAutoLayoutModelItem *item = [SDAutoLayoutModelItem new];
item.value = @(value);
if ([viewOrViewsArray isKindOfClass:[UIView class]]) {
item.refView = viewOrViewsArray;
} else if ([viewOrViewsArray isKindOfClass:[NSArray class]]) {
item.refViewsArray = [viewOrViewsArray copy];
}
[weakSelf setValue:item forKey:key];
return weakSelf;
};
}
...
@end
3、调用
SDAutoLayoutModel *model = [SDAutoLayoutModel new];
model.leftSpaceToView(view, 10)
.topSpaceToView(view, 16);
网友评论