iOS-链式编程思想

在iOS中,链式编程虽然用的不太多,但是,在特定的应用环境下,利用block实现链式编程的话,会大大的提高编程效率,并且代码直观易读。

iOS中链式编程中最经典的例子是Masonry为代表的代码形式,代码如下:

make.top.left.equalTo(@20);

我们知道OC的点语法实际上就是调用getter/setter方法,能实现这种链式最根本的原因是每次使用调用getter方法的时候的返回值实际上就是对象本身,这样我们就能一直使用该对象一直使用点语法去调用。

Swift和OC的写法是有区别:

Swift是直接返回对象本身,如:

func name(_ name: String) -> Person {}

OC 是返回一个 返回值为对象本身的 Block,如:

- (Person * (^)(NSString *))name;

造成这种差别的原因是:

1.Swift中的点语法是可以直接用来使用方法的。

2.OC中的点语法实际就是一个 getter/setter 方法,使用点语法,那么相当于使用 getter/setter 方法获取属性,因此采用和Swift类似的方法的话,只能用 [ ] 来调用,那么他的链式就表现为

[[[person name(@"Lily")] sex(@"men")] age(19)];

缺乏美感,也不简洁。但是返回带参数,返回值为对象本身的 Block 的话,则可以表现为是一个 getter 方法,get一个 Block,然后在Block中传递参数。

例子:

Swift 链式编程

Swift中的实现链式编程比Objective-C中简单很多,通过func和extension即可实现。

iOS-链式编程思想_第1张图片
扩展UIView:

调用方法:

iOS-链式编程思想_第2张图片
测试代码

Objective-C 链式编程

Objective-C中实现链式编程主要是通过Block来实现,利用方法的点式调用,自定义LWJView,定义如下:

iOS-链式编程思想_第3张图片
LWJView.h

实现如下:

iOS-链式编程思想_第4张图片
LWJView.m

调用方法:

iOS-链式编程思想_第5张图片
测试代码

运行的结果都是:

iOS-链式编程思想_第6张图片
运行结果图

你可能感兴趣的:(iOS-链式编程思想)