如何简单地返回基础对象的实例?

时间:2014-11-13 14:33:28

标签: swift

我有一个子类,我希望能够返回其超类的实例。这不起作用:

func baseTransaction()->Transaction {
    return super
}

我可以用这样的简单方式返回基类,还是需要创建实例并复制所有适当的属性?在过去,我已经做到了这一点,但我想我会看到是否有办法更简单地做到这一点。

1 个答案:

答案 0 :(得分:0)

当你说“返回它的超类的一个实例”时,我认为你的意思是“将这个类实例作为它的超类返回” - 在这种情况下你必须返回实例本身:

func baseTransaction() -> Transaction {
    return self
}

如果你有一个Transaction类,并创建一个SubTransaction子类:

class SubTransaction : Transaction { ... }

然后SubTransaction的任何实例也是Transaction的实例,因此可以赋予类型Transaction的任何变量(或者可以作为参数传递)。

请注意,子类可以覆盖基类的实现,同时保持相同的接口(或扩展它)。如果这是您想要避免的,并且您需要基类的真实实例,那么唯一的方法是创建一个新实例。大概你必须在基类中创建一个复制构造函数,然后获得一个带有如下函数的超类副本:

func baseTransaction() -> Transaction {
    return Transaction(self)
}