我有一个类,它采用泛型class Collection: <T: Model>
(Model
是一个类)和一个Resource
的某些子类实现的协议(Collection
): / p>
class Collection: <T: Model> {
typealias Callback = (result: Collection <T>) -> ()
}
protocol Resource {...}
是否可以编写Self
是Collection
实例的协议扩展?
尝试使用带有泛型的类来扩展协议:
extension Resource where Self: Collection {
func fetch() {}
}
给出:
对泛型类型'Collection'的引用需要&lt; ...&gt;
中的参数
尝试使用协议扩展采用泛型的类:
extension Collection where Self: Resource {
func fetch(callback: Callback?) {}
}
给出:
'Self'仅在协议中可用或作为类
中方法的结果
我不知道该怎么办。目标是该功能仅在符合Collection
的{{1}}实例上可用。
答案 0 :(得分:0)
问题是Collection
是一个泛型类,因此无论您在何处声明它,都必须附加专用类型,如Collection<T>
。但是,无法使用泛型类型指定对协议的扩展,因此您最终无法将T
提供给Collection
。
但是,在您的情况下,T
被限制为Model
类型,那么为什么不在默认协议实现中使用它呢?
extension Resource where Self: Collection<Model> {
func fetch() {
// default implementation
}
}