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

Hun*_*lan 3 inheritance swift

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

为了这个例子,我的班级如下所示:

class Base: NSObject {
    class func objects() -> [Base] {
       return []
    }
}
Run Code Online (Sandbox Code Playgroud)

基类的子类如下所示:

class Subclass: Base {

}
Run Code Online (Sandbox Code Playgroud)

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

let objects = Subclass.objects()
Run Code Online (Sandbox Code Playgroud)

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

有没有什么办法可以自动Subclass.objects()返回一个[Subclass],而无需在子类中编写任何额外的代码?

我最初的想法是写:

class func objects() -> [Self]

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

ske*_*ech 5

您可以使用协议和扩展来实现这一点:

protocol BaseProtocol {}

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

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

let objects = Subclass.objects()
Run Code Online (Sandbox Code Playgroud)