所以我有两个类Base
和More
,看起来像这样
class Base:NSObject {
class func whatsMineType() -> Base {
return Base()
}
}
class More:Base {
}
如果我调用方法Base.whatsMineType()
和More.whatsMineType()
,他们都给了我Base
类型的对象。有没有办法修改方法whatsMineType()
,而不在Base
覆盖它,所以它会返回从中调用的类型的对象?
我的目标是Base.whatsMineType()
将返回Base
类型对象,More.whatsMineType()
将返回More
类型对象。
我尝试使用泛型类型,但我对它们没有多少体验。任何建议都将受到超级赞赏。
修改
正如我试图解释的那样,这不是找到正确类型的重点,而是如何用正确的类型实例化对象。
答案 0 :(得分:0)
函数whatsMineType()
不返回类型(它可能应该),而是返回该类型的对象。它所做的只是初始化该类型的对象。
您应该使用初始化程序:
let base = Base()
let more = More()
因为它是一个类函数,所以函数是多余的,因为你需要直接在类型上调用它,所以你可以使用那个类型。
如果要获取类的类型以将其作为变量传递,可以使用
let baseType = Base.self
let moreType = More.self
如果要从其类型中实例化对象,只需使用
let base = baseType.init()
let more = moreType.init()
但您可以考虑使用泛型。
答案 1 :(得分:0)
当您处于静态范围时,您只需致电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