我想知道是否有可能允许方法接受泛型超类的任何子类。我已经发布了下面我想要实现的示例代码。希望能够更好地描述我的情况。Swift泛型 - 允许作为参数传递的子类
import UIKit
class SuperDataClass {
}
class SubDataClass: SuperDataClass {
}
class SuperClass<T: SuperDataClass>: UITableViewCell {
}
class SubClass: SuperClass<SubDataClass> {
}
class Example {
func test(object: SuperClass<SuperDataClass>) {
print(object)
}
}
let object = SubClass()
Example().test(object: object)
当在操场上运行此,你会得到以下错误:
Playground execution failed: error: Generics.playground:20:24: error: cannot convert value of type 'SubClass' to expected argument type 'SuperClass<SuperDataClass>'
究其原因,据我所知,是数据类型的数据类型的子类预期的方法。
行更改15
class SubClass: SuperClass<SuperDataClass> {
将解决这个问题,但并不适用于我想要实现的方案。我希望该方法可以处理任何继承SuperClass的对象,以便通过此方法处理。这可能吗?是否有更好的设置,我应该用来实现这一目标?
谢谢。
感谢这个信息,我现在好奇我们如何能做类似的事情,但对于一个将返回类似项目的方法。 我正在尝试一些方法,但尚未找出正确的方法来完成这项工作。 'FUNC返回类型() - >ü。键入{ 返回SubClass.self }' –
Steve
这不会因为'T'工作和'U'可以是任何类型的满足约束。你想要做什么?另外,我怀疑这应该是一个单独的问题。 @Steve – Sweeper
我同意,这是一个单独的问题。基本上我希望通过解决上面的例子(你的答案确实解决了这个问题)能理解我是如何能够传递一个通用超类的多个子类版本的。我有多个tableviewcell,每个tableviewcell都继承了一个tableviewcell,它知道如何将数据放在自己的位置。每个子类的数据类型都不相同。这非常精细,我可能不会很好地解释它。为了解决这个问题,我们将继续挖掘并尝试新问题。谢谢。 – Steve