用Sourcery减少样板代码

我们都写样板代码。 无论是平等的,可哈希的还是某些数据映射,有时我们所有人都需要编写无聊的重复代码。

最近,我遇到了一个非常适合代替我们执行此任务的工具。 名称是Sourcery,由KrzysztofZabłocki创建的库。

Sourcery会扫描您的源代码,应用您的个人模板并为您生成Swift代码,从而使您可以使用元编程技术来节省时间并减少潜在的错误。

那对我们有什么用呢?

我将向您展示创建数据对象时如何减少代码。

假设在您的应用程序中,您需要通过JSON格式从服务器获取有关某些帖子的一些信息。

因此,我们假设服务器响应如下所示:

对于这样的任务,我们通常需要创建数据对象,如下所示:

现在,如果您使用的是Alamofire,则很容易向服务器发出请求,并且如果您不想手工进行所有json解析,则可能最终会使用ObjectMapper之类的东西。

现在,要确认由ObjectMapper提供的Mappable协议,您需要为PostDO对象编写扩展,如下所示:

现在,这看起来还不错,但是随着您的应用程序的增长,您会发现自己处于不断为不同数据对象实现映射功能的过程中,这完全没有意思。

让我们使用Sourcery自动化此任务。

Sourcery通过使用用Stencil编写的模板来生成代码。 因此,对于我们的任务,模板将类似于:

现在,如果我们将PostDO代码修改为如下所示:

并运行Sourcery,Mappable.genic.swift文件中的代码如下所示:

好极了! Sourcery为我们生成了Mappable协议的实现。

现在说我们需要来自服务器的一些用户信息

因此,我们将创建UserDO结构并将其标记为可映射:

如果我们现在运行Sourcery,我们将并检查生成的文件,我们将看到类似以下内容:

几乎是我们想要的,但我们需要正确设置firstName和lastName,Sourcery为此提供了工具-它称为键注释。
让我们将模板修改为如下所示:

我们在这里检查属性是否用jsonKey标记,并使用其值而不是属性名称。
因此,我们将修复UserDO使其看起来像:

再次运行Sourcery,生成的文件将如下所示:

啊! 现在一切似乎井井有条。

如您所见,Sourcery大大减少了创建我们的数据对象所需的样板,并且它具有一些强大的功能。

我强烈建议您查看Sourcery及其文档,因为它可以做的远远超出本文中所述。

另外,如果您进行蒸气开发,我建议您查看它的源模板。

哦,顺便说一下,KrzysztofZabłocki将在下个月的里加(DevFest Baltics)2017年DevFest Baltics上谈论Sourcery中的新事物,因此,如果您有任何疑问,可以在那儿见到他。

再见!

Interesting Posts