返回被调用的types的对象的方法

所以我有两个类BaseMore看起来像这样

 class Base:NSObject { class func whatsMineType() -> Base { return Base() } } class More:Base { } 

如果我调用方法Base.whatsMineType()More.whatsMineType() ,他们都给了我的对象types的Base 。 有没有办法修改方法whatsMineType() ,而不重写它在Base ,所以它会返回被调用的types的对象?

我的目标是Base.whatsMineType()将返回Basetypes对象和More.whatsMineType()将返回Moretypes的对象。

我已经尝试过generics,但我没有太多的经验。 任何build议将超级赞赏。

编辑

正如我试图解释的,这不是find正确的types,而是如何实例化正确的对象。

由于您处于静态作用域,您可以简单地调用self.init()来执行此操作。 您还必须定义一个required初始化程序,以确保可以使用它构造所有的子类。

 class Base : NSObject { // mark init() as required to ensure that all subclasses can be constructed with it required override init() {} class func whatsMineType() -> Self { return self.init() } } class More : Base {} let b = Base.whatsMineType() print(type(of: b)) // Base let m = More.whatsMineType() print(type(of: m)) // More 

whatsMineType()函数不会返回types(它可能应该),而是该types的对象。 它所做的只是初始化该types的对象。

你应该使用这个初始化器:

 let base = Base() let more = More() 

因为它是一个类函数,所以函数是多余的,因为你需要直接调用types,所以你可以使用types。

如果你想获得一个类的types作为variables传递它,你可以使用

 let baseType = Base.self let moreType = More.self 

当你想从它的types实例化一个对象时,就使用它

 let base = baseType.init() let more = moreType.init() 

但是你可能会考虑使用generics。