之前一直没有使用Masonry,最近因为比较闲,就尝试使用了下Masonry,但是Masonry这种和Objec-C大相庭径的写法,搞得我有点懵逼,于是今天简单学习了一下链式编程。为了巩固知识,于是有了这篇文章。不足之处希望大家不吝赐教。
在笔者的理解中,其实链式编程相对于我们常用的方法,最大的区别在于返回值,我们通常返回值类型为void 或其他类型的值,而链式编程返回的却是block,而block又返回了对象本身,而类方法也可以根据我们的需求来返回类对象或者作为初始化方法返回一个对象。而且可以多个方法之间可以任意调用,基本上可以无限调用下去,确实很像链子。莫非这就是链式编程的名字的由来嘛。。😄
下面结合代码来~
创建一个Person类,直接贴代码
其中3是无返回值无参,4是有返回值无参,5是有返回值有参,最后两个 是有返回值多参。eat 和 sleep分别对应两种写法。eatAndSleep是为了验证笔者的猜想,将block作为返回值,结果证明猜想正确。
- (void(^)(void))eat3;
- (void(^)(void))sleep3;
- (Person *(^)(void))eat4;
- (Person *(^)(void))sleep4;
- (Person *(^)(NSString* name))eat5;
- (Person *(^)(NSInteger hour))sleep5;
- (Person *(^)(NSString *food, NSInteger hour))eatAndSleep1; - (Person *(^)(NSString *food, NSInteger hour))eatAndSleep2;
- (eatAndSleep3)eatAndSleep3;
typedef Person*(^eatAndSleep3)(NSString*food,NSIntegerhour);
下面贴上运行效果的图片
以上是笔者参考网上的资料,进行的一些关于链式编程简单的学习。
为了验证学习效果,笔者自己使用链式编程写了一个UIView的category的具体如下。
各位可以参考一下,自己实现一下。我将demo上传到了GitHub,有兴趣的各位可以下载参考一下。链式编程学习Demo GitHub下载地址
网友评论