我有一个Swift类,它充当我的应用程序中其他类型对象的基类。该类用于数据建模,因此它实现了各种功能,以便从存储中保存和检索对象。
为了举例,我的课程如下:
class Base: NSObject {
class func objects() -> [Base] {
return []
}
}
基础的子类如下:
class Subclass: Base {
}
这非常有用,因为我可以创建子类的实例,然后获取一个对象数组:
let objects = Subclass.objects()
但是,返回的数组设置为[Base]
类型。
是否有可能让Subclass.objects()
自动返回[Subclass]
,而无需在子类中编写任何其他代码?
我最初的想法是写:
class func objects() -> [Self]
但是,这会导致编译器错误。
答案 0 :(得分:4)
您可以使用协议和扩展程序实现此目的:
protocol BaseProtocol {}
extension BaseProtocol {
static func objects() -> [Self] {
return []
}
}
class Base: NSObject, BaseProtocol {}
class Subclass: Base {}
let objects = Subclass.objects()