[英]Swift: Strange downcasting failure
我有一個很奇怪的失敗失敗案例,我無法理解。
我在兩個UITableViewController
有幾乎相同的代碼。 ProjectTableViewController
顯示Project
列表,其數據源為[Project]
。 NewsfeedsTableViewController
顯示的列表Newsfeed
,但Newsfeed
可以包含不同類型的源數據的,包括Project
。
根據源數據的類型,將NewsfeedsTableViewController
每個單元向下轉換為UITableViewCell
適當子類。
ProjectTableViewCell
是UITableViewCell
的子類,並且在ProjectTableViewController
和NewsfeedsTableViewController
中都使用。
現在有趣的是,代碼在ProjectTableViewController
可以正常工作,但在NewsfeedsTableViewController
崩潰,給出以下錯誤消息:
Could not cast value of type 'UITableViewCell' (0x102e68128) to 'sample_app.ProjectTableViewCell' (0x1010ce6d0).
我在每個班級都有以下代碼:
ProjectTableViewController.swift
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let project = projects[indexPath.row]
let cell = tableView.dequeueReusableCellWithIdentifier("ProjectTableViewCell") as! ProjectTableViewCell
cell.projectTitle.text = project.title
cell.projectKeywords.text = project.keywords
return cell
}
NewsfeedsTableViewController.swift
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let newsfeed = self.newsfeeds[indexPath.row]
switch newsfeed.newsfeedableType {
case "Project":
let cell = tableView.dequeueReusableCellWithIdentifier("NewsfeedTableViewCell") as! ProjectTableViewCell
let source = newsfeed.newsfeedable as! Project
cell.projectTitle.text = source.title
cell.projectKeywords.text = source.keywords
return cell
default:
let cell = tableView.dequeueReusableCellWithIdentifier("NewsfeedTableViewCell")!
cell.textLabel!.text = newsfeed.newsfeedableType + String(newsfeed.id)
return cell
}
}
我很想了解導致此問題的原因。
通過將另一個ProjectTableViewCell
原型單元添加到NewsfeedsTableViewController
並使用它以Project
作為源來顯示Newsfeed
,解決了該問題。
這意味着我將必須為所有源數據類型添加原型單元,然后在情節提要上對其進行配置。 我不希望這樣做。
我以為我可以通過這一切來回避,但是我想Swift不能那樣工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.