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 <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];

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 因为有 Masory 以及 Snapkit 这些知名开源库的存在,相信很多 iOS 开发者对链式编程都不会太陌生,...
    Q以梦为马阅读 3,785评论 0 8
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,035评论 3 119
  • 1,因为时间问题,简单描述一下这三个概念。 链式编程: 链式编程顾名思义iOS的点语法(.) 一点点到天昏地暗。当...
    门前一条小河流阅读 3,134评论 0 1
  • Pixel移动开发像素知识 px:css pixels逻辑像素,浏览器使用的抽象单位 dp,pt:device i...
    Mandy_jin阅读 3,666评论 0 3
  • 前段时间,我的女闺蜜兴高采烈的给我打电话说她脱单了,千年光棍终于脱单,简直喜大普奔。 But,她昨天又打电话给我说...
    墨痕zmm阅读 3,480评论 2 3