簡體   English   中英

Swift:奇怪的向下失敗

[英]Swift: Strange downcasting failure

我有一個很奇怪的失敗失敗案例,我無法理解。

我在兩個UITableViewController有幾乎相同的代碼。 ProjectTableViewController顯示Project列表,其數據源為[Project] NewsfeedsTableViewController顯示的列表Newsfeed ,但Newsfeed可以包含不同類型的源數據的,包括Project

根據源數據的類型,將NewsfeedsTableViewController每個單元向下轉換為UITableViewCell適當子類。

ProjectTableViewCellUITableViewCell的子類,並且在ProjectTableViewControllerNewsfeedsTableViewController中都使用。

現在有趣的是,代碼在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM