Objective-C 链式调用

OC 方法的调用都是通过 [] 实现的,如果想要连续调用就要进行多层嵌套,我们可以利用 block 的来实现 Objective-C 方法的链式调用。像这种用于特定领域的表达方式,我们叫做 DSL (Domain Specific Language)。

关于 block 的用法

1、函数式编程

把 block 当做函数的参数,可以把逻辑和函数放在调用时候的 block 里面,而不是方法内部。把相关的逻辑都放在一起,提高了开发效率和程序的可读性。这其实就是函数式编程思想。函数式编程在很多的第三方框架中都有明显的提现,比如 AFNetWorking、Masonry 等。

[view1 mas_makeConstraints:^(MASConstraintMaker *make) {

           make.edges.equalTo(superview).with.insets(padding);

}];

2、链式调用

外面的 block 就是函数式编程的一个体现,在 block 内部并不像常规的 OC 语言,而是不断的使用点语法调用,极大的精简了代码量,同时也拥有很好的可读性,使用方便,这种方式就叫做链式调用。

链式调用是怎么实现的呢?

* 后面带括号,说明方法的返回值是一个 block;

* 调用方法肯定是对象才可以调用,说明 block 的返回值是一个对象;

* 点语法说明这个方法没有参数;

结合以上三点,一个没有参数 & 有返回值 & 返回值是 block & block 的返回值是方法的调用者,就可以实现链式调用。

示例

调用方法:

testBtn.YTitle(@"测试", UIControlStateNormal).YTitleColor([UIColor blueColor], UIControlStateNormal).YFrame(CGRectMake(100, 300, 100, 50)).YBackgroundColor([UIColor yellowColor]).YAddToView(self.view);

本文 demo:https://github.com/yuetianlu/UIBaseDSL.git,给常用的系统原生 UI 控件扩展了链式调用用法。


参考文章:

https://www.jianshu.com/p/b74598269140

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容