我意欲基於它是英寸如果聲明瞭變量,swift變量類型在downcast後不會改變?
假設的UITableViewCell的子類是CellOne
,它有一個其var nameLabel
部向下轉換到一個UITableViewCell到不同的子類。在一種情況下,我倒下(如!)由dequeueReusableCellWithIdentifier(_:_:)
返回到CellOne
的UITableViewCell,並將其分配給cell
,在變換塊外部聲明爲var cell = UITableViewCell()
的變量。
但是之後,cell
無法訪問nameLabel
即CellOne
實例。我收到錯誤消息:「類型'UITableViewCell'的值沒有成員nameLabel」。
所以看起來cell
還沒有被降級到UITableViewCell的子類。
cell
可以訪問nameLabel
(在塊外聲明之後)有什麼辦法嗎?一個變量在聲明後可以通過分配一個子類實例來將其變爲另一種類型嗎?
非常感謝您的時間。
這裏是我的代碼:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
var cell = UITableViewCell()
switch indexPath.section {
case 0:
cell = tableView.dequeueReusableCellWithIdentifier("cellOne", forIndexPath: indexPath) as! CellOne
cell.nameLabel.text = "one" // Error: Value of type 'UITableViewCell' has no member 'nameLabel'
case 1:
cell = tableView.dequeueReusableCellWithIdentifier("cellTwo", forIndexPath: indexPath) as! CellTwo
...... // Other cases
}
return cell
}
和代碼CellOne
:
class CellOne: UITableViewCell {
@IBOutlet weak var nameLabel: UILabel!
......
}
嗨拉穆爾,謝謝你的回答!我沒有將'cell'聲明爲'CellOne',因爲它可能會根據它所在的部分被降頻到UITableViewCell的其他子類(如CellTwo,CellThree ...)。所以我無法將其聲明爲'CellOne 」。我會編輯這個問題,使其更清晰。 – ninikikki
所以如果你正在使用其他自定義單元格,你應該只在同一個代碼塊中聲明 – Lamar
我不想重複「return cell」多次。但我想我沒有其他選擇=)非常感謝! – ninikikki