gpt4 book ai didi

swift - 泛型的最终自类,在方法签名中,在 Swift 中

转载 作者:行者123 更新时间:2023-11-30 10:14:29 24 4
gpt4 key购买 nike

我有一个BaseObject定义我想要在所有数据实体之间共享的常见行为的模型。它有一个这样的方法:

class BaseObject {
static func fetch(block: ((Results<BaseObject>) -> Void)) {
// networking code here
}
}

当然,我需要这个方法的签名足够动态,以便类 Products 的模型

class Products: BaseObject { //...

产生 Results<Product>列表而不是 Results<BaseObject> 。我不想重新实现 fetch每个子类中的方法,因为除了主体和签名中使用的确切的最终子类名称之外,它是相同的。

我无法使用Self :

Xcode error

我还有什么选择吗?

最佳答案

您现在可以从 Swift 2.0 开始执行此操作,因为它允许协议(protocol)中方法的默认实现。为此,您可以将基类设为协议(protocol),并使用 Self,正如您在示例中所尝试的那样。

https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Protocols.html#//apple_ref/doc/uid/TP40014097-CH25-ID521

编辑:

这在 Swift 2.0/Xcode 7.0 Beta 中编译:

class Results<T> {

}

protocol BaseObject {
static func fetch(block: ((Results<Self>) -> Void))
}

extension BaseObject {
static func fetch(block: ((Results<Self>) -> Void)) {
// networking code here
}
}

此功能仅在 Swift 2.0 中可用,据我所知,Swift 1.2 或更低版本中没有解决方案。

关于swift - 泛型的最终自类,在方法签名中,在 Swift 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30991057/

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