美文网首页
Objective-C 链式编程简单实现

Objective-C 链式编程简单实现

作者: Console_Liu | 来源:发表于2017-11-27 16:47 被阅读0次
    链式编程
    • 链式编程,其实就是通过.点语法将多行代码链接成一句代码,书写简洁、可读性好,但代码语法苦涩难懂。关于链式编程的使用那就是仁者见仁智者见智了。这篇文章主要介绍一下链式编程的简单实现。先来看一下下面的代码:
    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 链式编程简单实现

          本文链接:https://www.haomeiwen.com/subject/rgudbxtx.html