iOS项目开发框架“完全体”(二)-- 终极“奥义”全解
2017-11-29 本文已影响136人
Suneday
- 设计思路
在实际开发中经常会遇到需要设置VC的多个属性的时候,这个时候就要写一系列比较恶心又臃肿不堪的代码,这时想到了masonry的链式语法的优雅之处,为什么我们不可以直接用这种优雅的方式去执行呢,下面开始了
*常规写法
- (void)setNaviTitle:(NSString *)naviTitle {
self.navigationItem.title = naviTitle;
}
- (void)naviTitle:(NSString *)title color:(UIColor *)color font:(UIFont *)font {
self.navigationItem.title = title;
[self.navigationController.navigationBar setTitleTextAttributes:@{ NSForegroundColorAttributeName:color, NSFontAttributeName:font}];
}
*响应式
- (JQBaseViewController *(^)(NSString *title))setupNaviTitle {
return ^(NSString *title) {
self.navigationItem.title = title;
return self;
};
-(JQBaseViewController *(^)(UIColor *))setupTitleColor {
return ^(UIColor *color) {
self.titleColor = color;
[self.navigationController.navigationBar setTitleTextAttributes:@{ NSForegroundColorAttributeName:self.titleColor, NSFontAttributeName:self.titleFont}];
return self;
};
}
}
*函数式
- (JQBaseViewController *)setNaviTitle:(NSString *)naviTitle {
self.navigationItem.title = naviTitle;
return self;
}
- (JQBaseViewController *)TextAttributes:(NSDictionary *)Attribute {
[self.navigationController.navigationBar setTitleTextAttributes: Attribute];
return self;
}
*函数式调用过程
[[self setNaviTitle:@"title"]TextAttributes:@{}];
调用分析:调用的时候略显臃肿,主要体现在调用的时候还的加一对【】,括号太多,代码的可读性太差,各个方法之间还需要用括号衔接
*响应式调用过程
self.setupNaviTitle(@"title").setupNavAttar(@{});
调用分析:这种写法在做到简化方法调用的同时,通过链式的方式,将代码连接成一行,大大增加代码的可读性。
思考一下上面我们说的需求,以一个链式的语法实现多个属性的设置,在OC里面通过.调用的方法一定是当前对象调用的属性方法,要想实现多重链式那么就要在函数体内做到实现这个函数要做的功能,之后再返回当前的实例对象才能进行方法的链式调用,所以我们写了一个返回类型为JQBaseViewController的闭包函数方法,函数内部只有一个参数,设置导航栏的标题文本,既然我们写了一个函数闭包类型的方法,那么我们就要在函数内部实现这个函数闭包进行功能的回调实现,内部实现完毕返回当前实例对象,方可进行链式调用
- 注意这里一定要理解这个函数式编程的思想,上述函数就是一个简单的实例
对函数式编程、响应式编程没有一点想法的同学可以先去看第一章节http://www.jianshu.com/p/2bb75c683530 iOS【项目开发框架“完全体”(一)】,我们将在下个章节进行响应式编程通用接口Api开发中进行详细讲解如何设计以及开发响应式API,敬请期待...
有问题可以随时进行咨询,750460196@qq.com
谢谢阅读...