Object-C实现链式编程
链式编程,多用于给对象赋值操作,可以一直.下去,方便赋值操作
例如:
[FQTestView new].fq_frame(CGRectMake(100, 100, 100, 50)).fq_bgColor([UIColor redColor]).fq_addView(self.view);
Object-C的链式编程是基于block,实现的,通过在block内做赋值操作,同时block 返回的是当前对象。因为返回的是当前对象,所有可以继续调用当前对象的方法
代码示例:
自定义一个view,叫 FQTestView
FQTestView.h代码
@interface FQTestView : UIView
/** <#注释#> */
@property (nonatomic, copy, readonly) FQTestView *(^fq_frame)(CGRect frame);
/** <#注释#> */
@property (nonatomic, copy, readonly) FQTestView *(^fq_bgColor)(UIColor *color);
/** <#注释#> */
@property (nonatomic, copy, readonly) FQTestView *(^fq_addView)(UIView *superView);
@end
FQTestView.m代码
@implementation FQTestView
- (FQTestView * _Nonnull (^)(CGRect))fq_frame{
return ^(CGRect frame){
self.frame = frame;
return self;
};
}
- (FQTestView * _Nonnull (^)(UIColor *))fq_bgColor{
return ^(UIColor *color){
self.backgroundColor = color;
return self;
};
}
- (FQTestView * _Nonnull (^)(UIView * _Nonnull))fq_addView{
return ^(UIView *superView){
[superView addSubview:self];
return self;
};
}
@end
在ViewController 的调用如下
- (void)viewDidLoad {
[super viewDidLoad];
[FQTestView new].fq_frame(CGRectMake(100, 100, 100, 50)).fq_bgColor([UIColor redColor]).fq_addView(self.view);
}
好了,是不是很简单
网友评论