gpt4 book ai didi

swift - 子类的闭包/回调中的 instancetype 参数类型

转载 作者:可可西里 更新时间:2023-11-01 02:21:33 26 4
gpt4 key购买 nike

假设我有一个异步任务来获取像这样的实例数组:

class func fetchListOfInstances(callback: ([MySuperClass])->()) {
// do long task asynchronously and call the callback
}

这可以像这样使用:

MySubclass.fetchListOfInstances() { myList in // myList inferred as [MySuperClass]
for whatever in myList {
let typeIReallyWant = whatever as! MySubclass
// do stuff here with each instance of typeIReallyWant
}
}

Swift 在类型方面似乎总是很聪明,所以如果没有办法做这样的事情我会感到惊讶,但我无法从 Google 搜索中找到任何东西:

class func fetchListOfInstances(callback: ([Self])->()) {
// do long task asynchronously and call the callback
}

...

MySubclass.fetchListOfInstances() { myList in // myList inferred as [MySubclass]
for whatever in myList {
// do stuff here with each instance of whatever
}
}

这可能是不可能的,但我认为值得一试。

最佳答案

根据 'Self' is only available in a protocol or as the result of a class methodUse Self as generic type看来你所追求的目前是不可能的。相反,您可以使用函数,例如:

func fetchInstances<T: MySuperClass>(callback: [T] -> Void) {
// Do long task asynchronously and call the callback.
}

在上面的函数中,您可能会在某个时刻创建 T 的实例。在这种情况下,您需要在 MySuperClass 中需要一个初始化程序;这意味着 MySuperClass 的所有子类也必须实现该初始化程序。例如:

class MySuperClass {
required init(arg: String) {
// ...
}
}

您现在可以在 fetchInstances 中使用 T(arg: "...") 因为您知道 T 实现 init(arg: String)

最后,您将调用 fetchInstances,明确说明 myList 的类型,以便 Swift 知道 T 是什么类型。

fetchInstances { (myList: [MySubClass]) in
// ...
}

关于swift - 子类的闭包/回调中的 instancetype 参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30607557/

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