编辑
如何在Objtive-C中实现流式接口(fluent interface)。
本文访问次数:0

首先看一下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);

ObjectiveCVerbalExpressionsGitHub

没有任何评论