Swift:从超类返回子类型的对象数组

时间:2016-10-26 16:21:38

标签: swift inheritance

我有一个Swift类,它充当我的应用程序中其他类型对象的基类。该类用于数据建模,因此它实现了各种功能,以便从存储中保存和检索对象。

为了举例,我的课程如下:

class Base: NSObject {
    class func objects() -> [Base] {
       return []
    }
}

基础的子类如下:

class Subclass: Base {

}

这非常有用,因为我可以创建子类的实例,然后获取一个对象数组:

let objects = Subclass.objects()

但是,返回的数组设置为[Base]类型。

是否有可能让Subclass.objects()自动返回[Subclass],而无需在子类中编写任何其他代码?

我最初的想法是写:

class func objects() -> [Self]

但是,这会导致编译器错误。

1 个答案:

答案 0 :(得分:4)

您可以使用协议和扩展程序实现此目的:

protocol BaseProtocol {}

extension BaseProtocol {
    static func objects() -> [Self] {
        return []
    }
}

class Base: NSObject, BaseProtocol {}
class Subclass: Base {}

let objects = Subclass.objects()