Object-C简单实现链式编程

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);
    
}

好了,是不是很简单

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