2015-10-06 119 views
1

更新到iOS9我開始在下面的代碼看到一個奇怪的警告後:演員總是失敗iOS9

func tableView(tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? 
{ 
    var result: UIView? 

    if UserPerspective.List == currentUser.perspective.value 
    { 
     result = tableView.dequeueReusableCellWithIdentifier("CustomHeader") as? UIView 
    } 

    return result 
} 

而作爲在標題中說我得到以下警告:

從「的UITableViewCell」無關型「的UIView」

演員總是失敗

我不明白爲什麼會失敗,因爲UITableViewCell的是子類的UIView,那麼演員應該沒問題。然而迅速編譯器並不這麼認爲:)

+1

我想這沒有必要將UIView子類強制轉換爲UIView。 – kirander

+1

你想從UITableViewCell施放?到UIView,這確實總是會失敗。你可以投向UIView? - 那麼它總會成功。所以最好的選擇就是不要投 - 所有事情都會按照你的預期工作。 –

回答

1

你不應該施放它。

這應該足以

let result = tableView.dequeueReusableCellWithIdentifier("CustomHeader") 

,其中結果是UITableViewCell?

如果你有一個自定義的UITableViewCell,姑且稱之爲customTableViewCell,你可以做到以下幾點:

let result = tableView.dequeueReusableCellWithIdentifier("CustomHeader") as! customTableViewCell 
+0

是的,我試圖上升 - 你有沒有覺得愚蠢,因爲我現在做:) –

0

你並不需要強制轉換的UITableViewCell到UIView的,因爲它總是會成功的,找你得到上面的錯誤,因爲你投可選到UIView的

result = tableView.dequeueReusableCellWithIdentifier("CustomHeader")! as? UIView 

這將工作,但沒有用它來鑄造它。

+0

這樣我會得到另一個錯誤,該錯誤將始終成功。見@威廉的答案是正確的。 –

+0

是的,我在上面提到過。它會一直成功,所以你不需要鑄造 – Lukas