代码之家  ›  专栏  ›  技术社区  ›  Duck

在表视图单元格上执行保护let有什么好处吗?

  •  0
  • Duck  · 技术社区  · 4 年前

    我见过有人在表视图委托中编写此代码

    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
    
        ...
    }
    

    如果单元格未出列,两个代码不会在同一行崩溃吗?

    有什么区别吗?我没看到。

    1 回复  |  直到 4 年前
        1
  •  1
  •   Paulw11    4 年前

    dequeueReusableCell(withIdentifier:) 可以返回 nil 在重用池中没有单元格的情况下(即首次显示tableview时)。当它回来的时候 实例化适当类型的单元格是您的责任。

    guard let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! SuitCell? else {
      fatalError()
    }
    

    说“如果你从重用池中得到一个单元格,而它不是 SuitCell ,崩溃,但是 可以”(请注意可选的类型)

    而这段代码:

    let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier) as! SuitCell
    

    SuiteCell公司

    dequeueReusableCell(带标识符:) 已经不用了。你会使用较新的(但从iOS 6开始就一直在使用) dequeueReusableCell(withIdentifier:,for:) 总是 返回一个单元格,您可以期望它是正确的类(或者您将在开发过程中快速发现问题):

    let cell = tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier, for: indexPath) as! SuitCell