通过Nil-Or-Empty-Coalescing运算符(???)为空或不存在的可选项提供有意义的默认值

要解决此问题,我必须先打开可选包装,并检查它是否为nil或为空。 在这种情况下,我提供了一些有意义的默认值,例如,让用户知道他要查找的值当前不可用。

过去不久,我偶然发现了?? 运算符(顺便称为Nil合并运算符),它使您可以为nil的可选选项提供默认值。 但这不能解决可选不是null而是空的情况。

由于我不喜欢一遍又一遍地写相同的代码,只是稍微改变一下语法以反映变量名,所以我发现必须有一个更好的方法。

幸运的是,我们可以轻松扩展Optional并实现一个不错的功能来为我们做这件事。 我们只需要在扩展中编写一次解开代码,就不必再碰它了。

如果由于某种原因必须更改它,我们可以方便地在一个地方更改它,而不必经历整个项目,这确实很痛苦。 所以这里是:

那更好。 一个简单的函数,检查该值是nil还是空,并在这种情况下使用默认值。 但是,为什么我们要限制自己使用String? 使它成为各种可选功能的通用功能不是很好吗?

我认为是的,这就是为什么我更进一步。 当然,并非每个可选项都具有isEmpty属性。 字符串和数组都有它们,但是一个空的Int会是什么样子?

多数民众赞成在一个简单的解决。 我们可以使用isEmpty属性创建一个协议。 然后,我们可以限制我们的功能以查找实现上述协议的Optional。

如您所见,对于String和Array,我们甚至不需要实现某些东西,因为这些类型已经具有isEmpty属性。 现在,让我们以默认情况下没有isEmpty属性的类型实现我们的新成就,以查看它是否确实像我们期望的那样运行(我的意思是,无论如何,谁会信任计算机?)

哇,真棒。 真的行。 但是如果你像我一样,那你就是懒惰。 甚至可能是如此懒惰,以至于即使使用自动完成功能,键入“ orWhenNilOrEmpty”也已经非常费力。

当我意识到自己多么懒惰时,我想起了? 操作员。 您是否知道在Swift中可以编写自己的运算符? 当我在上面的代码上工作时,我偶然发现了这一点,这完全让我震惊。

对我来说,这是那些绝对幸运的事故之一,使我自己怀疑是否有巧合之类的事情。 这只是为了完美。 我必须立即尝试一下,这是我想到的:

我称它为“无或空”促销员,我很喜欢它。 我希望这一小部分内容可以帮助您编写更好的代码。 对我来说,这是一次很棒的学习经历。

在改进对Optional的理解的方式上(之前我从未关心过.some(wrapped)和.none,我实际上也不了解它们),我改善了对协议扩展和约束的了解,最后但并非最不重要的一点是,了解了如何编写自定义运算符。

我的建议是,每当发现自己编写相同或非常相似的代码两次以上时,就一定要研究是否存在更好的方法。