泛型的最终自我 class,在方法签名中,在 Swift 中

Final self class for generics, in method signature, in Swift

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

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

当然,我需要此方法的签名足够动态,以便 class Products

的模型
class Products: BaseObject { //...

生成 Results<Product> 列表而不是 Results<BaseObject>。我不想在每个 subclass 中重新实现 fetch 方法,因为除了正文和签名中使用的确切最终 subclass 名称外,它会完全相同。

我无法使用 Self:

我有什么选择吗?

您现在可以从 Swift 2.0 开始执行此操作,因为它允许在协议中默认实现方法。为此,您可以使基础 class 成为一个协议,并使用 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 或更早版本中没有解决方案。