我有这种力量演员:
let cell = tableView.dequeueReusableCell(withIdentifier: "TownTableViewCell",
for: indexPath) as! TownTableViewCell
试图通过典型方法避免这种情况:
if let cell = tableView.dequeueReusableCell(withIdentifier: "TownTableViewCell",
for: indexPath){
}
但它不正确,我该如何解决?
答案 0 :(得分:1)
不要回避,做强制施放。
那是很少有人欢迎武力的情况之一。
如果所有内容均正确连接,则代码绝对不能崩溃。如果这样做,则表明存在设计错误。
避免用可选绑定强制施加力是没有意义的,因为在提到的设计错误的情况下,表格视图将显示为不显示。
答案 1 :(得分:0)
因此dequeueReusableCell总是会返回一个UITableCell。您只需要有条件地将其转换为正确的类型:
if let cell = tableView.dequeueReusableCell(withIdentifier: "TownTableViewCell",
for: indexPath) as? TownTableViewCell {
}
答案 2 :(得分:0)
如果您完全确定您的单元格将始终是正确的类型,您可以保持原样。如果没有,并且您需要返回某种类型的单元格(例如在cellForRowAt
方法中),则可以为失败时提供默认值。我通常喜欢使用闭包来避免使用临时变量或额外解包:
let cell = tableView.dequeueReusableCell(withIdentifier: "TownTableViewCell",
for: indexPath) as? TownTableViewCell ?? { () -> TownTableViewCell in
// build your default cell here
return defaultCell
}()
答案 3 :(得分:-1)
您可以使用警卫。
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "Cell", for: indexPath)
guard let viewCell = cell as? ImageCollectionViewCell else {
return YourCollectionViewCell()
}
return viewCell
祝你好运
答案 4 :(得分:-2)
您可以使用guard
。
guard let cell = tableView.dequeueReusableCell(withIdentifier: "TownTableViewCell",
for: indexPath) as? TownTableViewCell else {
// you can have your custom error
// return the default cell as method return expect it
return UITableViewCell()
}
为什么我要在这里守卫:
它执行可选绑定,因此我们获取单元格以及允许我们返回如果转换不正确,这对调试非常有用。