在下面的代码中:

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,那么您就有崩溃的感觉。

09-03 23:52