iOS开发-面试

ios block 实现点语法、链式编程

2018-07-25  本文已影响10人  莪的世界木有如果

相信用过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点语法连接

上一篇 下一篇

猜你喜欢

热点阅读