如何在Swift中返回instancetype [英] How can I return instancetype in Swift
本文介绍了如何在Swift中返回instancetype的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我想扩展某些类以返回运行时类型对象
I want to make an extension of some class to return the runtime type object
例如,我创建了A类的扩展
for example, I create extenstion of class A
extension A {
class func niceObject() -> XXXXX { // in objective-c is instancetype
return ....
}
}
所以任何人都知道Swift中是否有instancetype关键字或不替换xxxxx
,我可以在A的子类上调用此函数而无需手动强制转换
So anyone know there is instancetype keyword in Swift or not to replace xxxxx
and I can call this function on subclass of A without manually cast
var b: B = B.niceObject()
谢谢
推荐答案
您可以做到.下面的游乐场代码. niceObject()必须返回的是self().此外,您必须在基类上具有required
初始化.
You can do it. Playground code below. It's self() that niceObject() has to return. Additionally, you must have a required
init on the base class.
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
这篇关于如何在Swift中返回instancetype的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文