什么是链式编程

2019-11-12  本文已影响0人  MT_suny

1.相信很多小伙伴都用过Masonry.对其中的点操作是不是觉得非常方便简洁呢?
那我们就聊聊是怎么操作的.首先Masonry中的点其实是OC对属性直接访问操作.本质就是getter方法.其中的()是C语言的函数调用操作,那么我们可以把二者结合起来让我们的属性设置放到Block块中返回我们的对象.这样对象的属性就可以一直设置下去...是不是很简单.
举个简单的例子:创建一个自定义的Label
.h文件中的内容

#import <UIKit/UIKit.h>

@interface HRLabel : UILabel
- (HRLabel*(^)(NSString *color))HRcolor; //设置label的字体颜色
- (HRLabel*(^)(NSString *text))HRtext;//设置label的展示文本
- (HRLabel*(^)(NSInteger font))HRfont;//设置label的Font
- (HRLabel*(^)(NSTextAlignment aligenment))HRalignment;//设置label的对齐方式
- (HRLabel*(^)(NSString *numOflines))HRlines;//设置label展示行数
@end

.m 文件中方法实现

#import "HRLabel.h"
#import "HRCommon.h"

@interface HRLabel ()

@end

@implementation HRLabel

- (HRLabel *(^)(NSString *color))HRcolor{
    HRLabel *(^HYlabel)(NSString *) = ^(NSString *color){
        self.textColor = [UIColor getHEXRGB:color];
        return self;
    };
    return HYlabel;
}

- (HRLabel *(^)(NSString *))HRtext{
    HRLabel *(^HYlabel)(NSString *) = ^(NSString *text){
        self.text = text;
        return self;
    };
    return HYlabel;
}

- (HRLabel *(^)(NSInteger))HRfont{
    HRLabel *(^HYlabel)(NSInteger) = ^(NSInteger font){
           self.font = [UIFont systemFontOfSize:font];
           return self;
    };
    return HYlabel;
}

- (HRLabel *(^)(NSString *))HRlines{
    HRLabel *(^HYlabel)(NSString *) = ^(NSString *lines){
             if(lines)self.numberOfLines = [lines integerValue];
             return self;
      };
    return HYlabel;
}

- (HRLabel *(^)(NSTextAlignment))HRalignment{
    HRLabel *(^HYlabel)(NSTextAlignment) = ^(NSTextAlignment aligenmet){
             self.textAlignment = aligenmet;
             return self;
      };
    return HYlabel;
}

是不是很容易理解

这样我们就可以在项目中快乐的使用链式操作了

- (UILabel *)phoneNumL{
    if (!_phoneNumL) {
        _phoneNumL = [HRLabel new].HRcolor(@"333333").HRalignment(NSTextAlignmentLeft).HRfont(15);
    }
    return _phoneNumL;
}

这就简单的链式操作

上一篇 下一篇

猜你喜欢

热点阅读