3 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個(gè)贊
if let
并guard let
提供類(lèi)似但不同的目的。
“else”的情況guard
必須退出當(dāng)前范圍。通常這意味著它必須調(diào)用return
或中止程序。guard
用于提供早期返回,而不需要嵌套其余的功能。
if let
嵌套其范圍,并不需要任何特殊的東西。它可以return
或不。
一般來(lái)說(shuō),如果if-let
塊將是函數(shù)的其余部分,或者它的else
子句中有一個(gè)return
或中止,那么你應(yīng)該使用它guard
。這通常意味著(至少在我的經(jīng)驗(yàn)中),如果有疑問(wèn),guard
通常是更好的答案。但是有很多情況if let
仍然適合。

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
何時(shí)使用if-let
以及何時(shí)使用guard
往往是一種風(fēng)格問(wèn)題。
假設(shè)您有func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int
一個(gè)可選的項(xiàng)目數(shù)組(var optionalArray: [SomeType]?
),0
如果數(shù)組是nil
(未設(shè)置)或者count
數(shù)組是否有值(設(shè)置),則需要返回。
您可以使用if-let
以下方式實(shí)現(xiàn)它:
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
真正的亮點(diǎn)是,當(dāng)你有一個(gè)像驗(yàn)證數(shù)據(jù)的任務(wù),你想如果有什么是錯(cuò)的功能早期失效。
if-let
當(dāng)你接近完成驗(yàn)證時(shí),“成功路徑”和現(xiàn)在成功綁定的選項(xiàng)都在方法的主要范圍內(nèi),而不是嵌套一堆s,因?yàn)槭÷窂揭呀?jīng)全部返回。
- 3 回答
- 0 關(guān)注
- 567 瀏覽
添加回答
舉報(bào)