2017-05-24 66 views
1

我有這樣的力量投:如何糾正避免這種力量投

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

,並試圖通過典型的方法來避免這種情況:

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

但其不正確的,我應該如何解決這個問題?

回答

0

您可以使用guard

guard let cell = tableView.dequeueReusableCell(withIdentifier: "TownTableViewCell", 
               for: indexPath) as? TownTableViewCell else { 
     // you can have your custom error 
     return 
} 

爲什麼我喜歡在這裏守護的是:

它確實可選的結合,所以我們得到的細胞,以及使我們能夠返回,如果鑄件不正確,這對於調試非常好。

0

所以dequeueReusableCell總是要返回一個UITableCell。您只需要有條件地將其轉換爲正確的類型:

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

如果您完全確定您的單元格將始終是正確的類型,則可以保持原樣。如果不是,並且您需要返回某種類型的單元格(如在cellForRowAt方法中),則可以爲其失敗時提供默認值。我通常喜歡用閉合來做,以避免與臨時變量或額外的解包有關:

let cell = tableView.dequeueReusableCell(withIdentifier: "TownTableViewCell", 
     for: indexPath) as? TownTableViewCell ?? {() -> TownTableViewCell in 
    // build your default cell here 
    return defaultCell 
}()