2017-02-21 55 views
1

cellForRowAtIndexPath我:只有「如果讓」的其他塊?

if let imageView = cell.viewWithTag(SOME_TAG) as? UIImageView 
{ 
    // Nothing to do here. 
} 
else 
{ 
    // Add image view to cell. 
} 

,但我只需要else塊。有沒有辦法反轉if let xyz =

(我知道我可以打破它,有一個if imageView == nil

剛剛發現this similar question

+1

這可能會有所幫助:http://stackoverflow.com/a/27412931/1208191 –

+0

另一個很好的建議是避免標籤儘可能。他們確實污染了源代碼。 – Sulthan

+0

@Sulthan同意,但增加了對可重複使用的表格視圖單元的追加子視圖的最小污染。 –

回答

2

這樣的事情?

if cell.viewWithTag(SOME_TAG) == nil { 

} 
3

您可以使用警衛。它正是你所需要的:

guard let x = x where x > 0 else { 
     // Value requirements not met, do something 
     return 
    } 
+1

不錯,但它對我來說並不像是一個「警戒」狀態。但也許我只是需要習慣於在這種情況下使用它。 –

+1

@意義事項'警衛let _ = cell.viewWithTag(SOME_TAG)else {return}'。 – Sulthan

+1

這只是問題的逆向邏輯,還是我錯過了什麼? –

1

爲什麼不乾脆:

if cell.viewWithTag(SOME_TAG) == nil { 
    // Add image 
} 
1

...但我只需要else塊。有沒有辦法反轉if let xyz =

你想知道你是否能反轉的可選綁定條款的邏輯,只有在可選的結合未能進入。但是,這恰好發生在可選表達式有界的情況下(在您的案例中,cell.viewWithTag(SOME_TAG) as? UIImageView)是nil。因此,對於這種邏輯來說,沒有任何理由試圖將價值綁定在首位;您只需檢查可選表達式是否爲nil

這樣做的直接方式已在其他兩個答案中進行了介紹,但作爲替代方案,您可以執行.none的模式匹配。

if case .none = xyz { 
    // implement logic ... 
} 

或者應用到你的例子

if case .none = cell.viewWithTag(SOME_TAG) as? UIImageView { 
    // implement logic ... 
}