在下面的代码中:
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()
}