相信用过masonry的童鞋,一定被它的魅力折服,真的很好用啊。masnory是用链式编程的思想来写的,用起来一个个block用点连接起来,即省代码又美观,巴特,链式编程是怎么样实现的嘞。。。不用着急,且往下看。
讲链式编程,不得不讲oc中的点语法,.XX是getter,.XX = XXX;是setter,显然链式编程是一串的,所以我们应该想到讲block声明为属性,并且在这些block属性的getter方法中做一些事情。哈哈,是不是简单易懂,巴特,如何去具体的实现链式编程呢,别急,这儿有我写的一个小demo,看了希望你对链式编程能理解。
一、常规写法
我们一般写方法函数的时候是通过以下方式写的
图1
图2
二、两个方法通过[]来进行连续调用
要做到连续调用,则两方法就必须有返回值,且返回值是当前类的本身,这样才可在调用一个方法后,调用另外一个方法,下面来看下
图2-1
实现方法:
图2-2
调用:
图2-3
三、通过点语法来实现两个方法
要通过点语法,就需要通过block的形式来实现。block具有一个函数的外观,又被当作一个变量。那么block就具备两个功能,第一:可以作为类的属性被'点'出来。第二:可以当作函数直接调用。下面逐个解释,第一个类的属性可以点出来,比如person.name;这很好理解,你一定见过,str.length;对吧。第二个呢,block作为一个变量,但是又可以把它当作指向函数的指针一样调用。
上述两个方法,怎么样才可以用点语法调用呢?
图3-1
实现:
图3-2
调用:
图3-3
四、点语法链式结构
要实现self.eat().like()这样的语法,则eat方法和like方法必须返回self,这样才可以调用;那么下面我们这么写:
图4-1
实现:
图4-2
调用:
图4-3
五、点语法链式带参数
带参数的怎么实现呢?其实很简单,我们创建block属性的时候,一般都是
图5-1
那eat和like方法带参数的实现很类似
图5-2
实现:
图5-3
调用:
图5-4
打印结果:
图5-5
六、点语法链式结构带block回调,在block里面处理事务,类似
self.eat(@"香蕉",^(NSString *food){
NSLog(@"我喜欢吃%@",food);
});
定义:
图6-1
实现:
图6-2
调用:
图6-3
控制台打印结果:
图6-4
上述就是block实现点语法调用方法和链式编程,下面附上一个git,是对alertCtroller进行点语法addAction和AddTextField的实现:alertController点语法连接











网友评论