繁体   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