我想扩展一些类来返回运行时类型对象
例如,我创建类 A 的扩展
extension A {
class func niceObject() -> XXXXX { // in objective-c is instancetype
return ....
}
}
所以任何人都知道 Swift 中有 instancetype 关键字或不替换 xxxxx
并且我可以在 A 的子类上调用此函数而无需手动转换
var b: B = B.niceObject()
谢谢
最佳答案
你可以做到。下面的 Playground 代码。 niceObject() 必须返回的是 self()。此外,您必须在基类上有一个 required
init。
class A {
required init() {
}
func whatClassAmI() -> String {
return "Class A"
}
}
class B: A {
required init() {
super.init()
}
override func whatClassAmI() -> String {
return "Class B"
}
}
let a = A()
let sa = a.whatClassAmI() // "Class A", of course
let b = B()
let sb = b.whatClassAmI() // "Class B", of course
extension A {
class func niceObject() -> Self {
return self.init()
}
}
let aa = A.niceObject()
let saa = aa.whatClassAmI() // "Class A"
let bb = B.niceObject()
let sbb = bb.whatClassAmI() // "Class B", as required
关于objective-c - 如何在 Swift 中返回实例类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24180768/