如何纠正避免这种力量施放

时间:2017-05-24 20:44:03

标签: swift xcode swift3

我有这种力量演员:

let cell = tableView.dequeueReusableCell(withIdentifier: "TownTableViewCell",
                                                     for: indexPath) as! TownTableViewCell

试图通过典型方法避免这种情况:

if let cell = tableView.dequeueReusableCell(withIdentifier: "TownTableViewCell",
                                                     for: indexPath){
} 

但它不正确,我该如何解决?

5 个答案:

答案 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()
}

为什么我要在这里守卫:

它执行可选绑定,因此我们获取单元格以及允许我们返回如果转换不正确,这对调试非常有用。