簡體   English   中英

擴展協議,其中 Self:Swift 中的泛型類型(需要 <...> 中的參數)

[英]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 {...}

是否可以編寫一個協議擴展,其中SelfCollection一個實例?

嘗試使用采用泛型的類擴展協議:

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

給出:

對泛型類型“Collection”的引用需要 <...> 中的參數

嘗試使用協議擴展采用泛型的類:

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

給出:

“Self”僅在協議中可用或作為類中方法的結果可用

我不知道如何繼續。 目標是使函數僅在符合ResourceCollection實例上可用。

問題是Collection是一個泛型類,所以在你聲明它的每一個地方,你都必須附加專門的類型,比如Collection<T> 但是,不能使用泛型類型指定協議的擴展,因此您最終無法將TCollection

不過,在您的情況下, T被限制為Model類型,所以為什么不在默認協議實現中使用它:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM