好的,这就是问题所在:
说我们有一个包含ChildClasses数组的父类
class ParentClass {
var list: [ChildClass<UITableViewCell>] = []
func append<T>(cell: T) where T: UITableViewCell {
let child = ChildClass<T>()
list.append(child)
}
}
和子类
class ChildClass<T> where T: UITableViewCell {
var obj: T!
}
这两个类都是通用的,Type(T)总是类型为UITableViewCell
现在如果您尝试构建它,您将收到此错误:
无法转换ChildClass类型的值&lt; T>预期参数类型ChildClass&lt; UITableViewCell&gt;
但是如果T是UITableViewCell的子类,那么它是不是能够转换T ??? 提前谢谢
答案 0 :(得分:1)
ChildClass<T>
不是ChildClass<UITableViewCell>
的子类,即使T
是UITableViewCell
的子类。
我的回答提供了一个例子,说明如果建立了这样的协方差可能会出现什么问题:https://stackoverflow.com/a/42615736/3141234
答案 1 :(得分:1)
ChildClass<UITableViewCell>
与ChildClass<SomeSubclassOfUITableViewCell>
不兼容。
一种解决方法是将ChildClass<SomeSubclassOfUITableViewCell>
转换为ChildClass<UITableViewCell>
,因为从逻辑上讲,它们应该兼容。我还注意到你没有使用cell
参数,所以这可能就是你想要的方法:
func append<T>(cell: T) where T: UITableViewCell {
let child = ChildClass<UITableViewCell>()
child.obj = cell
list.append(child)
}