gpt4 book ai didi

objective-c - 如何在 Swift 中返回实例类型

转载 作者:IT老高 更新时间:2023-10-28 11:41:51 25 4
gpt4 key购买 nike

我想扩展一些类来返回运行时类型对象

例如,我创建类 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com