首先看一下Java语言中一个典型的流式接口调用方式
Author author = AUTHOR.as(“author”);
create.selectFrom(author)
.where(exists(selectOne()
.from(BOOK)
.where(BOOK.STATUS.eq(BOOK_STATUS.SOLD_OUT))
.and(BOOK.AUTHOR_ID.eq(author.ID))));
它的实现非常简单,只要在每个方法中都返回this
即可,然而在Objective-C中确不是那么容易,至少不是很好看,例如下面的代码
[[[[[[[Person alloc] init] getUp] wash] eatBreakfast] driveToWork] eatLaunch];
这种流式接口没有任何意义,可读性差,容易写错括号等。
想要实现可读性好,容易调用的流式接口,只能通过block实现了,如下所示
VerbalExpressions *tester = VerEx()
.startOfLine(YES)
.then(@”http”)
.maybe(@”s”)
.then(@”://“)
.maybe(@”www”)
.anythingBut(@” “)
.endOfLine(YES);