我有一个需要泛型的类class Collection: <T: Model>
(Model
是一个类)和一个协议(Resource
)的一些子类Collection
实施:
class Collection: <T: Model> {
typealias Callback = (result: Collection <T>) -> ()
}
protocol Resource {...}
是否可以编写一个协议扩展Self
是一个实例Collection
?
尝试使用采用泛型的类来扩展协议:
extension Resource where Self: Collection {
func fetch() {}
}
Gives:
对泛型类型“Collection”的引用需要 <...> 中的参数
尝试扩展采用协议泛型的类:
extension Collection where Self: Resource {
func fetch(callback: Callback?) {}
}
Gives:
“Self”仅在协议中可用或作为类中方法的结果
我不知道如何继续。目标是该函数仅在以下实例上可用Collection
符合Resource
.
问题是Collection
是一个泛型类,因此在声明它的每个地方,都必须附加专门的类型,例如Collection<T>
。但是,无法使用通用类型指定协议的扩展,因此您最终无法提供T
to Collection
.
但就你而言,T
被限制为类型Model
那么为什么不在默认协议实现中使用它:
extension Resource where Self: Collection<Model> {
func fetch() {
// default implementation
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)