[英]Extending a Protocol where Self: Generic Type in Swift (Requires Arguments In <...>)
我有一個類,它采用一個泛型class Collection: <T: Model>
( Model
是一個類)和一個Collection
一些子類實現的協議( Resource
):
class Collection: <T: Model> {
typealias Callback = (result: Collection <T>) -> ()
}
protocol Resource {...}
是否可以編寫一個協議擴展,其中Self
是Collection
一個實例?
嘗試使用采用泛型的類擴展協議:
extension Resource where Self: Collection {
func fetch() {}
}
給出:
對泛型類型“Collection”的引用需要 <...> 中的參數
嘗試使用協議擴展采用泛型的類:
extension Collection where Self: Resource {
func fetch(callback: Callback?) {}
}
給出:
“Self”僅在協議中可用或作為類中方法的結果可用
我不知道如何繼續。 目標是使函數僅在符合Resource
的Collection
實例上可用。
問題是Collection
是一個泛型類,所以在你聲明它的每一個地方,你都必須附加專門的類型,比如Collection<T>
。 但是,不能使用泛型類型指定協議的擴展,因此您最終無法將T
給Collection
。
不過,在您的情況下, T
被限制為Model
類型,所以為什么不在默認協議實現中使用它:
extension Resource where Self: Collection<Model> {
func fetch() {
// default implementation
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.