|
|
1
230
的“其他”情况
通常,如果
|
|
2
150
守卫可以提高 清晰当你使用守卫时,你有很多 较高的 对警卫的期望 达到目的 有一点很重要,如果它不成功,那么您只需要退出范围 早期的 。就像您要查看文件/图像是否存在,数组是否为空。
如果您使用If let编写上述代码,它会向阅读开发人员传达一种五五开的感觉 清晰 这意味着我希望它能在95%的时间内工作……如果它失败了,我不知道为什么会失败;这是非常不可能的……但只需使用这个默认图像,或者只需使用一条有意义的消息来描述错误所在!
由于以上建议和干净的代码 可能的 您需要将断言添加到 失败 guard语句,它只是提高了可读性,并向其他开发人员表明了您的期望。
(您不会使用断言/前提条件
使用防护装置还可以通过以下方式提高清晰度 避开金字塔 厄运。看见 Nitin's answer . Guard将处理违规需求的代码保存在需求旁边
为了清楚,
例子:
在上文中,要求图像不存在于缓存中。如果图像存在,则违反了我们的要求。我们很早就回来了。正如您所看到的,我们还处理了违反的代码路径,就在它的需求旁边,即结构不是:
这个 Swift Docs on Control Flow 解释背后的想法:
Guard通过创建 新 当前范围中的变量有一个重要的区别,我相信没有人能很好地解释。
二者都
具有
具有
有关更多信息
防护要求 作用域退出(Rob Napier的回答中也提到):
你必须有
对于
|
|
|
3
54
何时使用
说你有
您可以使用
或者像这样使用
这些示例在功能上完全相同。
哪里
而不是嵌套一堆
|
|
|
4
39
我将尝试用一些(未优化的)代码解释guard语句的有用性。 您有一个UI,用于验证用户名、姓氏、电子邮件、电话和密码的用户注册文本字段。 如果任何textField不包含有效文本,则应将该字段设置为firstResponder。 以下是未优化的代码:
您可以在上面看到,所有字符串(firstNameString、lastNameString等)只能在if语句的范围内访问。因此,它创建了这个“末日金字塔”,并存在许多问题,包括可读性和移动东西的方便性(如果字段的顺序被更改,则必须重写大部分代码)
使用guard语句(在下面的代码中),您可以看到这些字符串在
如果字段的顺序发生变化,只需向上或向下移动相应的代码行,就可以开始了。 这是一个非常简单的解释和用例。希望这有帮助! |
|
|
5
21
基本区别 警卫室
如果让
注意:这两个都用于展开可选变量。 |
|
|
6
7
后卫让vs如果让
|
|
|
7
6
我看到的最清楚的解释是 Github Swift Style Guide :
|
|
|
8
6
保护声明的格式如下:
|
|
|
9
2
我是从斯威夫特和鲍勃那里学到的。。 典型的Else If
Else If的问题
保护声明 只有当条件为false时,保护块才会运行,并且它将通过返回退出函数。如果条件为真,Swift将忽略保护块。它提供了早期退出和更少的括号+
使用Else If展开选项 guard语句不仅适用于用else-if语句替换典型的条件块,还适用于通过最小化括号的数量来展开选项。为了进行比较,让我们首先开始如何使用else-if展开多个选项。 首先,让我们创建三个将展开的选项。
最糟糕的噩梦
上面的代码当然有效,但违反了DRY原则。这太残忍了。让我们把它分解+ 稍微好一点 下面的代码比上面的代码更可读+
用防护装置展开 其他if语句可以用guard替换+
使用Else If展开多个选项 到目前为止,您一直在逐一展开选项。Swift允许我们一次打开多个期权。如果其中一个包含nil,它将执行else块。
使用Guard展开多个选项 当然,我们应该在其他情况下保持警惕+
|
|
|
10
0
swift中guard和if语句的主要区别是:
|
|
|
Tom · SwiftUI.sheet导致背景白色闪烁 1 年前 |
|
|
Danil · 种子/填充核心数据的最佳实践?[关闭] 1 年前 |
|
|
Robin · LazyVGrid项目预计不会击中测试区域 1 年前 |
|
|
Saurabh Saini · 结构下标 1 年前 |
|
|
Alex Smith · 移动到下一个视图控制器后如何显示警报? 1 年前 |