链式编程是OC中一种很好的设计模式。框架中使用链式编程,会让框架使用者感觉写的代码更加美观简洁。
链式编程的效果
UIEdgeInsets padding=UIEdgeInsetsMake(10,10,10,10);
[view1 mas_makeConstraints:^(MASConstraintMaker*make){make.edges.equalTo(superview).with.insets(padding);}];
链式编程de关键语法
链式编程使用的两个关键且常用的语法:点语法、block。
点语法
可作用于属性,也可作用于无参的方法。
block
使用block作为方法返回值,即调用该方法则可以返回一个block。
block可以定义任意类型的参数,也可定义返回值。
block的返回值类型是所在方法所属的类型(值不一定是self)。
关于block最好不要作为属性存在,随时爆发循环引用。或者你遇到block就使用weakSelf吧。
使用链式编程de SegmentBar
估计大家都封装过一个 SegmentBar:segmentBar简单示例code。
不使用链式编程de效果
这里如果想再次更改 config,则需要将config暴露出去。
// 主要代码@interfaceLWSegmentBarConfig:NSObject
@property(nonatomic,strong)UIColor*itemNormalColor;
@property(nonatomic,strong)UIColor*itemSelectColor;@end
// 使用演示
LWSegmentBarConfig*config=[LWSegmentBarConfig new];
config.itemNormalColor=[UIColor lightGrayColor];
config.itemSelectColor=[UIColor blueColor];...属性很多
LWSegmentBar*bar=[LWSegmentBar segmentBarWithFrame:CGRectMake(0,0,self.view.frame.size.width,64)segmentBarConfig:config];
使用链式编程de效果
// 主要代码@interfaceLWSegmentBarConfig:NSObject
-(LWSegmentBarConfig*(^)(UIColor*color))lw_itemNormalColor;-(LWSegmentBarConfig*(^)(UIColor*color))lw_itemSelectColor;
@end
@implementationLWSegmentBarConfig
-(LWSegmentBarConfig*(^)(UIColor*color))lw_itemNormalColor{return^(UIColor*color){self.itemNormalColor=color;returnself;};}
-(LWSegmentBarConfig*(^)(UIColor*color))lw_itemSelectColor{return^(UIColor*color){self.itemSelectColor=color;returnself;};}
@end
// 使用演示LWSegmentBar*bar=[XMGSegmentBar segmentBarWithFrame:CGRectMake(0,0,self.view.frame.size.width,64)];
[bar lw_updateConfig:^(LWSegmentBarConfig*config){config.lw_itemNormalColor([UIColor lightGrayColor]).lw_itemSelectColor([UIColor blueColor]);}];
网友评论