[英]Is there any advantage doing a guard let on a table view cell or not?
我見過有人在表視圖委托中編寫此代碼
override func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell {
guard let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! SuitCell? else {
fatalError()
}
...
}
現在考慮這個其他代碼
override func tableView(_ tableView: UITableView,
cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! SuitCell
...
}
如果單元沒有出列,兩個代碼不會在同一行崩潰嗎?
有什么區別嗎? 我沒有看到它。
dequeueReusableCell(withIdentifier:)
可以在重用池中沒有單元格的情況下返回nil
(即當 tableview 首次顯示時)。 當它返回nil
,您有責任實例化適當類型的單元格。
因此,這段代碼:
guard let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! SuitCell? else {
fatalError()
}
說“如果您從重用池中獲得一個單元格並且它不是SuitCell
的實例,則崩潰,但nil
是可以的”(注意SuitCell
轉換為可選)
雖然這段代碼:
let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! SuitCell
說“如果你沒有得到SuitCell
的實例就會崩潰,或者你得到nil
”,所以當 tableview 第一次顯示時它會崩潰。
dequeueReusableCell(withIdentifier:)
真的不再使用了。 您將使用較新的(但自 iOS 6 以來仍然存在) dequeueReusableCell(withIdentifier:,for:)
變體,因為它總是返回一個單元格,並且您可以期望它是正確的類(或者您會在開發過程中很快發現問題) :
let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier, for: indexPath) as! SuitCell
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.