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

猎人多兰

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

为了示例,我的类如下所示:

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

基础的子类如下所示:

class Subclass: Base {

}

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

let objects = Subclass.objects()

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

有没有办法在子类中不编写任何其他代码的情况下自动Subclass.objects()返回值[Subclass]

我最初的想法是写:

class func objects() -> [Self]

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

sketchyTech

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

protocol BaseProtocol {}

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

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

let objects = Subclass.objects()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

返回子类作为超类的类型

超类类型对象的子类的构造方法?

Java:分配了子类数组对象的超类数组对象

在数组中创建Java中超类类型的子类对象

从超类型的扩展列表返回子类型对象的列表

超类类型的对象无法访问子类的方法

如何从超类方法而不是超类类型返回子类型

从超类对象数组中调用子类方法

将子类型对象添加到超类型列表中,然后从超类型列表中返回子类型列表

是否可以声明一个函数,该函数接受超类实例的数组并返回最特定的子类类型

对超类对象的子类引用

扩展到BigDecimal的类从超类类型返回对象

如何使超类查询集返回子类对象?还是将超类查询集向下转换为子类列表?

Swift:将对象数组转换为子类型数组

当子类对象存储在超类数组中时,如何调用子类方法?

基类静态方法返回Swift中子类的类型

如何从 Python 中现有的超类类型对象实例化子类类型变量

Java 8 数组列表返回超类对象列表

是否有可能在超类类型的数组中包含子类数组

创建持有超类和子类对象的对象数组的正确方法

对子类实例使用超类类型

如何使超类方法返回子类的实例

从函数而不是子类返回通用超类

使用子类对象访问超类函数

从超类的子类访问Scanner对象?

将超类的对象转换为子类

如何找到超类对象的子类?(Java)

Kotlin类型,子类型和超类型与类,子类和超类

如何确定泛型超类的特定子类的ACTUAL返回类型?