斯威夫特:守卫vs如果让

斯威夫特:守卫vs如果让

我一直在阅读关于Swift中的Optionals,我已经看过if let用于检查Optional是否包含值的示例,以及它是否存在 - 使用unwrapped值执行某些操作。

但是,我已经看到在Swift 2.0中,关键字guard主要用于。我想知道是否if let已从Swift 2.0中删除或是否仍然可以使用它。

我应该改变我的计划包含if letguard


繁星点点滴滴
浏览 509回答 3
3回答

陪伴而非守候

if let并guard let提供类似但不同的目的。“else”的情况guard必须退出当前范围。通常这意味着它必须调用return或中止程序。guard用于提供早期返回,而不需要嵌套其余的功能。if let嵌套其范围,并不需要任何特殊的东西。它可以return或不。一般来说,如果if-let块将是函数的其余部分,或者它的else子句中有一个return或中止,那么你应该使用它guard。这通常意味着(至少在我的经验中),如果有疑问,guard通常是更好的答案。但是有很多情况if let仍然适合。

慕少森

何时使用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,因为失败路径已经全部返回。
打开App,查看更多内容
随时随地看视频慕课网APP