展开Swift 3.0中的可选值-Guard Let vs If Let?

当以iOS开发人员的身份编写代码时,您将需要灵活性:var或let,类或结构,集合或数组。 不管它的功能是否不同,要想成为一名更高效的程序员,做出选择都至关重要。

展开可选值也不例外。

解包可选值时,我们中的许多人都对可选绑定和“ if let”语法约定非常熟悉。 “ if let”允许我们仅在有值的情况下安全地解开可选值,否则,代码块将不会运行。 简而言之,当值存在时,它的重点是“真实”条件。

然后,我可以一直使用“ if let”吗? 我为什么还要烦恼使用警卫let语句?

好吧,让我们通过检查下面的代码来决定原因。

在此示例中,我们从iOS设备上的文本字段中获取用户输入以制作完整的故事。 用户输入是:名字,年龄,城市和职业。 在这里,我们得到了可选值,必须将它们解开后才能正确显示在标签上。

我们可能会通过编码如下代码立即想到“ if let”来解开那些可选值:

您如何看待此代码? 它运作良好,但请看一下嵌套条件的冗长行。 如果我们需要用户提供更多信息怎么办? 我们应该继续写嵌套条件吗? 看起来很乱。

我们还可以将“ if let”与提前退出结合使用,如下所示:

它看起来比以前的要好一些。 但是,由“ if let”解开的值只能在if块的范围内使用。 在if块之外,必须使用!再次强制将其拆开。 似乎效率不高。

现在,让我们来看一下使用“ guard”语句的代码。

另一方面,“后卫”声明使我们的代码更具可读性。 可读性和易于维护非常重要,尤其是与其他程序员一起工作时。 如上面的“ if let”示例中所示,“ guard”语句有助于避免众多嵌套条件的复杂性。 与“如果让步”不同,“后卫”声明使早期退出成为可能,并着重于带有错误的负面案例,而不是正面案例。 这意味着如果不满足条件,我们可以通过运行卫队的else语句来测试否定情况,而不是先等待嵌套条件通过。

但是,使“后卫”声明真正脱颖而出的原因在于,在其余的冷块中仍保留有未包装的可选值。 这意味着当条件通过时,可选值将被解包,并且即使在条件之外也无需强制再次对其进行拆包即可使用。 无需像我们在“如果放手”中那样提前退出就强行打开它们。 请参见下面的代码。

需要注意的一件事:每个“ guard”语句必须始终通过退出其所在范围来转移控制权。更具体地说,如果在功能中使用“ guard”,则通常将“返回”,而在循环中,则将“中断” ”或“继续”。 (注意:“ break”和“ continue”不能在功能中使用!)

我们可以轻松地在Playground中进行测试和运行。

使用“ guard”语句可以提高代码质量,并具有更好的可读性和更容易的维护。 我们是否要使用“ if let”还是“ guard”完全是一个优先选择的问题,但是熟悉这两种语法肯定会帮助我们变得更加灵活。

感谢您的阅读,并祝您编程愉快!

Interesting Posts