现在我有以下课程:
class A {
class func instantiate() -> A {
return MakeObject()
}
}
class B: A {}
let x = B.instantiate()
这导致x为A类。如何更改instantiate
以返回从中调用的子类的实例?换句话说,这样x最终成为B型。
编辑:
根据Martin R的回答,这就是我以前解决的问题:
class A {
class func instantiate() -> Self {
func helper<T>() -> T {
return MakeObject() as! T
}
return helper()
}
}
答案 0 :(得分:4)
返回类型需要为Self
(这是具体类型
调用类方法,并且必须使用a进行初始化
required init
方法(可以在子类中重写):
class A {
class func instantiate() -> Self {
return self.init()
}
required init() {
}
}
class B: A {}
let x = B.instantiate() // `x` has type `B`
或者,只需定义一个init方法
init(parameters ...) {
}
“自动”返回该类的实例 呼吁。