为了账号安全,请及时绑定邮箱和手机立即绑定

斯威夫特:守卫vs如果让

斯威夫特:守卫vs如果让

繁星点点滴滴 2019-08-26 15:52:31
斯威夫特:守卫vs如果让我一直在阅读关于Swift中的Optionals,我已经看过if let用于检查Optional是否包含值的示例,以及它是否存在 - 使用unwrapped值执行某些操作。但是,我已经看到在Swift 2.0中,关键字guard主要用于。我想知道是否if let已从Swift 2.0中删除或是否仍然可以使用它。我应该改变我的计划包含if let到guard?
查看完整描述

3 回答

?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

if letguard let提供类似但不同的目的。

“else”的情况guard必须退出当前范围。通常这意味着它必须调用return或中止程序。guard用于提供早期返回,而不需要嵌套其余的功能。

if let嵌套其范围,并不需要任何特殊的东西。它可以return或不。

一般来说,如果if-let块将是函数的其余部分,或者它的else子句中有一个return或中止,那么你应该使用它guard。这通常意味着(至少在我的经验中),如果有疑问,guard通常是更好的答案。但是有很多情况if let仍然适合。


查看完整回答
反对 回复 2019-08-26
?
慕少森

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,因为失败路径已经全部返回。


查看完整回答
反对 回复 2019-08-26
  • 3 回答
  • 0 关注
  • 502 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信