斯威夫特:守卫vs如果让我一直在阅读关于Swift中的Optionals,我已经看过if let用于检查Optional是否包含值的示例,以及它是否存在 - 使用unwrapped值执行某些操作。但是,我已经看到在Swift 2.0中,关键字guard主要用于。我想知道是否if let已从Swift 2.0中删除或是否仍然可以使用它。我应该改变我的计划包含if let到guard?
3 回答
陪伴而非守候
TA贡献1757条经验 获得超8个赞
if let
并guard let
提供类似但不同的目的。
“else”的情况guard
必须退出当前范围。通常这意味着它必须调用return
或中止程序。guard
用于提供早期返回,而不需要嵌套其余的功能。
if let
嵌套其范围,并不需要任何特殊的东西。它可以return
或不。
一般来说,如果if-let
块将是函数的其余部分,或者它的else
子句中有一个return
或中止,那么你应该使用它guard
。这通常意味着(至少在我的经验中),如果有疑问,guard
通常是更好的答案。但是有很多情况if let
仍然适合。
慕少森
TA贡献2019条经验 获得超9个赞
何时使用if-let
以及何时使用guard
往往是一种风格问题。
假设您有func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
一个可选的项目数组(var optionalArray: [SomeType]?
),0
如果数组是nil
(未设置)或者count
数组是否有值(设置),则需要返回。
您可以使用if-let
以下方式实现它:
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { if let array = optionalArray { return array.count } return 0 }
或者像这样使用guard
:
func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int { guard let array = optionalArray else { return 0 } return array.count }
这些例子在功能上是相同的。
凡guard
真正的亮点是,当你有一个像验证数据的任务,你想如果有什么是错的功能早期失效。
if-let
当你接近完成验证时,“成功路径”和现在成功绑定的选项都在方法的主要范围内,而不是嵌套一堆s,因为失败路径已经全部返回。
- 3 回答
- 0 关注
- 541 浏览
添加回答
举报
0/150
提交
取消