我有一个 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]
但是,这会导致编译器错误。
您可以使用协议和扩展来实现这一点:
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)