什么是链式编程
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;
}
这就简单的链式操作