亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

斯威夫特:守衛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 關注
  • 591 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號