我有一个BaseObject
模型,用于定义我想要在所有数据实体中共享的常见行为。它有这样的方法:
class BaseObject {
static func fetch(block: ((Results<BaseObject>) -> Void)) {
// networking code here
}
}
当然,我需要这个方法的签名足够动态,以便类Products
的模型
class Products: BaseObject { //...
产生Results<Product>
列表而不是Results<BaseObject>
。我不想在每个子类中重新实现fetch
方法,因为除了在正文和签名中使用的确切的最终子类名称外,它将是相同的。
我无法使用Self
:
我有任何选择吗?
答案 0 :(得分:1)
现在,您可以在Swift 2.0中执行此操作,因为它允许在协议中默认实现方法。为此,您可以将基类作为协议,并使用Self,就像您在示例中所尝试的那样。
这在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或之前没有解决方案。