作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个采用通用 class Collection: <T: Model>
的类(Model
是一个类)和一个协议(protocol)(Resource
),Collection
的一些子类实现:
class Collection: <T: Model> {
typealias Callback = (result: Collection <T>) -> ()
}
protocol Resource {...}
是否可以在 Self
处编写协议(protocol)扩展?是 Collection
的实例?
尝试用采用泛型的类扩展协议(protocol):
extension Resource where Self: Collection {
func fetch() {}
}
给予:
Reference to generic type 'Collection' requires arguments in <...>
尝试扩展采用协议(protocol)泛型的类:
extension Collection where Self: Resource {
func fetch(callback: Callback?) {}
}
给予:
'Self' is only available in a protocol or as the result of method in a class
我不确定如何进行。目标是该函数仅在 Collection
的实例上可用。符合 Resource
.
最佳答案
问题是Collection
是一个泛型类,所以在你声明它的每个地方,你都必须附加专门的类型,比如 Collection<T>
.但是,无法使用通用类型指定对协议(protocol)的扩展,因此您最终无法提供 T
至 Collection
.
虽然在你的情况下,T
被限制为 Model
类型那么为什么不在默认协议(protocol)实现中使用它:
extension Resource where Self: Collection<Model> {
func fetch() {
// default implementation
}
}
关于swift - 扩展协议(protocol),其中 Self : Generic Type in Swift (Requires Arguments In <. ..>),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33357346/
我是一名优秀的程序员,十分优秀!