ios开发-链式编程

什么是链式编程,我看到这个东西第一反应,这不就是一个装饰模式嘛,其实我的理解,链式编程就是一个写法特别的装饰模式,具体怎么特别呢。他用“.”来链接各个代码块,大家最熟悉的应该就是现在特别火的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 
#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];

好啦,打完收工。大家有什么问题,咱们一起讨论

你可能感兴趣的:(ios开发-链式编程)