返回被调用的types的对象的方法
所以我有两个类Base
和More
看起来像这样
class Base:NSObject { class func whatsMineType() -> Base { return Base() } } class More:Base { }
如果我调用方法Base.whatsMineType()
和More.whatsMineType()
,他们都给了我的对象types的Base
。 有没有办法修改方法whatsMineType()
,而不重写它在Base
,所以它会返回被调用的types的对象?
我的目标是Base.whatsMineType()
将返回Base
types对象和More.whatsMineType()
将返回More
types的对象。
我已经尝试过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。