在 Swift 中编程自定义 UITableViewCell 时强制向下转换



在下面的代码中:

let cell = tableView.dequeueReusableCell(
    withIdentifier: "MyCell",
    for: indexPath
) as MyTableViewCell  // 'UITableViewCell' is not convertible to 'MyTableViewCell'; did you mean to use 'as!' to force downcast?

我们有一个错误抱怨 UITableViewCell 不可转换为 MyTableViewCell .

所以编译器建议做一个强制转换:

let cell = tableView.dequeueReusableCell(
    withIdentifier: "MyCell",
    for: indexPath
) as! MyTableViewCell  // ?!?!?!

然而,这感觉很丑陋。

在处理tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)时,除了强制铸造之外别无选择吗?这真的是在 Swift 中实现此目的的最惯用方法吗?

谢谢!

这真的是最惯用的方式吗

绝对。这是完全标准的。

你可以像这样安全地投掷:

if let cell = tableView.dequeueReusableCell(
   withIdentifier: "MyCell",
   for: indexPath
) as? MyTableViewCell {

但我认为这是一种不值得这样做的情况,因为如果事实证明这不是MyTableViewCell,那么您就会非常真实地想要崩溃。

你可以

这样做:

guard let cell = tableView.dequeueReusableCell(
  withIdentifier: "MyCell",
  for: indexPath
) as? MyTableViewCell else {
    // Log an error, or fatalError("Wrong cell type."), etc.
    // or maybe return UITableViewCell()
}

相关内容

  • 没有找到相关文章

最新更新