簡體   English   中英

在表格視圖單元格上做守衛有什么好處嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM