在Swift中扩展自身:通用类型的协议(需要< ...>中的参数)

时间:2015-10-26 23:25:53

标签: swift

我有一个类,它采用泛型class Collection: <T: Model>Model是一个类)和一个Resource的某些子类实现的协议(Collection): / p>

class Collection: <T: Model> {
  typealias Callback = (result: Collection <T>) -> ()
}
protocol Resource {...}

是否可以编写SelfCollection实例的协议扩展?

尝试使用带有泛型的类来扩展协议:

extension Resource where Self: Collection {
  func fetch() {}
}

给出:

  

对泛型类型'Collection'的引用需要&lt; ...&gt;

中的参数

尝试使用协议扩展采用泛型的类:

extension Collection where Self: Resource {
  func fetch(callback: Callback?) {}
}

给出:

  

'Self'仅在协议中可用或作为类

中方法的结果

我不知道该怎么办。目标是该功能仅在符合Collection的{​​{1}}实例上可用。

1 个答案:

答案 0 :(得分:0)

问题是Collection是一个泛型类,因此无论您在何处声明它,都必须附加专用类型,如Collection<T>。但是,无法使用泛型类型指定对协议的扩展,因此您最终无法将T提供给Collection

但是,在您的情况下,T被限制为Model类型,那么为什么不在默认协议实现中使用它呢?

extension Resource where Self: Collection<Model> {
    func fetch() {
        // default implementation
    }
}