Objective-C 链式编程简单实现

链式编程
  • 链式编程,其实就是通过.点语法将多行代码链接成一句代码,书写简洁、可读性好,但代码语法苦涩难懂。关于链式编程的使用那就是仁者见仁智者见智了。这篇文章主要介绍一下链式编程的简单实现。先来看一下下面的代码:
LTView *view = [[LTView alloc] initWithFrame:CGRectMake(100, 100, 0, 0) Config:^(LTView *view) {
        view.lt_bgColor([UIColor redColor]).lt_viewWidth(100).lt_viewHeigth(100);
    }];

如何实现
  • 如何实现这样的效果的呢?我们知道实现链式编程,需要能够一直点下去,其实就是不断地返回实例对象,什么有返回值呢?方法有返回值,但是绝大多数的方法不能用.调用,不过OC中有一种block类型的语法。那么到这里我们就有了一个基本的思路:使用Block语法实现,而且Block的返回值是该类的一个实例,然后在这个Block里我们去做一些相应的操作。
1、属性方式

自定义LTView类继承UIView,在view中声明lt_bgColor属性,用来改变view的背景颜色,并重写属性的get方法

//属性声明
@property (nonatomic, copy) LTView *(^lt_bgColor)(UIColor *);
//属性get方法
- (LTView *(^)(UIColor *))lt_bgColor {
    return ^(UIColor *color) {
        self.backgroundColor = color;
        return self;
    };
}

说明:给view声明一个block类型的属性,block参数为UIColor *,返回值为类的实例对象,属性的get方法中返回就是这种类型的block。

2、函数声明方式

同样在LTView类中如下两个函数lt_viewWidthlt_viewHeigth分别用来改变view的宽度和高度。函数实现如下:

//函数声明
-(LTView *(^)(CGFloat width))lt_viewWidth;
-(LTView *(^)(CGFloat height))lt_viewHeigth;
//函数实现
- (LTView *(^)(CGFloat))lt_viewWidth {
    return ^(CGFloat width) {
        CGRect frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, width, self.frame.size.height);
        self.frame = frame;
        return self;
    };
}

-(LTView *(^)(CGFloat))lt_viewHeigth {
    return ^(CGFloat height) {
        CGRect frame = CGRectMake(self.frame.origin.x, self.frame.origin.y, self.frame.size.width, height);
        self.frame = frame;
        return self;
    };
}
最终实现效果

通过上面两种方式,接下来我们就可以愉快的用点语法写代码了

view.lt_bgColor([UIColor blueColor]).lt_viewWidth(200).lt_viewHeigth(200);

代码GitHub地址

你可能感兴趣的:(Objective-C 链式编程简单实现)