什么是链式编程,我看到这个东西第一反应,这不就是一个装饰模式嘛,其实我的理解,链式编程就是一个写法特别的装饰模式,具体怎么特别呢。他用“.”来链接各个代码块,大家最熟悉的应该就是现在特别火的masonry了(虽然我还是用frame。。)
[view mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.left.bottom.and.right.equalTo(@(0));//这句就是了
}];
这种写法的好处呢,看起来清晰明了,,不过masonry太难懂了,我找了好几个链式编程的代码,最后自己写了一个,非常简单,方便大家入门。
先来一个h文件放定义的block(忘了说了链式编程的代码块是使用block实现的)-文件名LinkBlocks.h
@class LinkLabel;
typedef LinkLabel *(^MakeFrame)(CGRect frame);
#define MakeFrame(frame) ^LinkLabel *(CGRect frame)
typedef LinkLabel *(^MakeBackgroundColor)(UIColor * color);
#define MakeBackgroundColor(color) ^LinkLabel *(UIColor * color)
接下来写一个label,就举个例子我就只写两个属性了,懒死了
h文件
#import <UIKit/UIKit.h>
#import "LinkBlocks.h"
@interface LinkLabel : UILabel
/** frame */
@property (nonatomic, copy) MakeFrame makeFrame;
/** backgoundcolor */
@property (nonatomic, copy) MakeBackgroundColor makeColor;
+(instancetype)labelinitWith:(void (^)(LinkLabel *make)) initblock;
@end
m文件
#import "LinkLabel.h"
@implementation LinkLabel
+(instancetype)labelinitWith:(void (^)(LinkLabel *make)) initblock{
LinkLabel *lable = [[LinkLabel alloc] init];
if (initblock) {
initblock(lable);
}
return lable;
}
-(MakeFrame)makeFrame{
return MakeFrame(frame){
self.frame = frame;
return self;
};
}
-(MakeBackgroundColor)makeColor{
return MakeBackgroundColor(color){
self.backgroundColor = color;
return self;
};
}
@end
最后来个使用
LinkLabel * label = [LinkLabel labelinitWith:^(LinkLabel *make) {
make.makeFrame(CGRectMake(100, 100, 100, 30)).makeColor([UIColor yellowColor]);
}];
label.text = @"link label";
[self.view addSubview:label];
好啦,打完收工。大家有什么问题,咱们一起讨论