gpt4 book ai didi

ios - swift 无法转换类型的值

转载 作者:行者123 更新时间:2023-11-28 14:29:35 26 4
gpt4 key购买 nike

我有很多TableViewCells,一个是基类

BaseTableViewCell<T: BaseTableViewItem>: UITableViewCell{
public var item: T!
}

还有一个是subClass like

ATableViewCell: BaseTableViewCell<ATableViewItem>

BTableViewCell: BaseTableViewCell<BTableViewItem>

ATableViewItem 和 BTableViewItem 是 BaseTableViewItem 的子类

问题是

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: item.cellIdentifier)
(cell as! BaseTableViewCell).item.title = "title"
return cell!;
}

并在 单元格中崩溃! BaseTableViewCell

Could not cast value of type 'Example.ATableViewCell' (0x1078453f0) to 'Example.BaseTableViewCell

我该怎么做?

附言:我这样做是因为我想改进我的项目 https://github.com/JavenZ/ZJTableViewManager ,在这个项目中,当我使用自定义单元格时,总是编写像 let item = self.item as 这样的代码! ZJTextItem,我觉得用起来有点棘手。所以我尝试使用通用的。好像还没有找到好的方法。你可以在 ZJTableViewManager 中看到演示。非常抱歉我的英文不好,无法清楚地表达自己的意思

最佳答案

看起来您正试图将子类转换为其父类(super class),这是不可能的。你可以向下转型(将一个父类(super class)转换为它的子类),因为子类与它的父类(super class)具有相同的属性,因此父类(super class)的一个实例的所有信息都可以在子类的实例中找到一席之地。但是,子类可以比父类(super class)拥有更多的信息,所以它的所有信息可能无法在父类(super class)中找到一席之地。

我也不明白为什么这是必要的。在任何地方,一个对象的类型被指定为一个类,它的子类就可以在它的地方使用。如果您需要从子类中使用父类(super class)的重写方法,您始终可以使用 super 关键字。我不明白为什么向上转型(从子类到父类(super class),你在做什么)是必要的。如果你能澄清一个原因,也许我可以提供更多帮助,但如果没有必要,你应该避免向上转换。

关于ios - swift 无法转换类型的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51355060/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com