使用结果扩展编写声明性代码
最近,我读了Benedikt Terhechte的精彩文章,他在其中扩展了optionals的API。 在标准银行,我们非常广泛地使用结果类型,因此我采用了相同的想法并将其应用于结果类型。 在这篇文章之后,我们将获得可组合的代码和声明性的API,类似于下面的代码片段。
您可以在以下Playground文件中找到一个工作示例。
TYRONEMICHAEL /结果扩展
result-extensions –使用结果扩展 github.com 编写声明性代码
虚构的摘要
假设我们正在为客户构建一个简单的应用程序。 与域名专家坐在一起后,他通知我们任何人都可以浏览该应用程序,但是要成为注册用户,您需要满足以下要求:
- 注册用户必须具有有效的 标识符 。
- 注册用户必须具有有效的电子邮件地址,并且该电子邮件地址必须是Gmail地址。
- 注册用户必须是千禧一代或X一代 。
- 我们需要向用户展示为什么尝试后无法注册 。
用应用程序扩展结果类型
要求之一是向用户显示为什么他们不能成为注册用户。 通过使用应用程序,我们可以非常漂亮地实现这一目标。
在编写我们的应用程序之前,我们需要定义一个称为半组的协议。 布兰登·威廉姆斯(Brandon Williams)对半群是什么以及为什么要使用半群有很好的解释。 出于本文的目的,我们只需要一个Array
即可符合协议。
现在,我们可以编写扩展结果类型的应用程序。
这允许编写以下代码。
如果在上面打印用户对象的内容,将得到以下内容:
失败:3个要素
-“无效的ID”
- “不合规电邮”
-“无效的千禧一代”
斯蒂芬·塞利斯(Stephen Celis)的精彩视频详细介绍了上述应用程序和Swift。 一块很棒的手表。
用AND扩展结果类型
要求之一是用户必须具有有效的电子邮件地址和有效的Gmail地址。 让我们使用和的以下代码扩展结果类型。
现在,我们可以执行以下操作。
如果打印结果,将得到以下输出。
失败:1个元素
-“无效的Gmail地址”
用OR扩展结果类型
最后一个要求是用户是千禧一代或X代。我们可以通过使用or
扩展结果类型来满足此要求。
现在我们有以下内容。
如果打印结果,将得到以下输出。
失败:2个要素
-“无效的千禧一代”
-“无效的gen x”
放在一起
下面的代码段满足了我们所有的要求。
如果您打印registeredUser
,您将获得成功的结果,具体取决于我们的输入或输出,详细说明了无法注册用户的原因。 在上述情况下,结果将打印以下内容。
失败:4个要素
-“无效的ID”
-“无效的Gmail地址”
-“无效的千禧一代”
-“无效的gen x”
奖金
让我们使用and
和or
自定义运算符扩展结果类型。
现在,我们可以将RegisteredUser.create
方法更新为以下内容。
结论
通过具有易于组合的小功能,可以实现高度的灵活性。 最后,您将获得易于维护,易于阅读和易于测试的代码。
您可以在以下游乐场文件中找到一个工作示例。
TYRONEMICHAEL /结果扩展
result-extensions –使用结果扩展 github.com 编写声明性代码
在Twitter上关注我,我经常喜欢在这里发布诸如此类的有趣话题。
泰隆·阿芙妮(@tyroneavnit)| 推特
Tyrone Avnit(@tyroneavnit)的最新推文。 爸爸,丈夫和多语言程序员。 专门从事iOS… twitter.com