2015-10-26 59 views
1

我有一個類,需要一個通用的class Collection: <T: Model>Model是一個類)和協議(Resource)的一些Collection子類實現:擴展一個協議,其中自:泛型類型斯威夫特(需要參數在<...>)

class Collection: <T: Model> { 
    typealias Callback = (result: Collection <T>) ->() 
} 
protocol Resource {...} 

是否可以寫一個協議擴展名SelfCollection的實例?

試圖與類擴展協議,需要一個通用:

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

給出:

參考通用類型 '集合' 需要參數在< ...>

試圖擴展帶有ag的類eneric與協議:

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

給出:

「自我」只適用於一個協議或方法的一類,結果

我不知道如何進行。目標是使該功能僅適用於符合ResourceCollection的實例。

回答

0

問題是Collection是一個泛型類,所以每一個你聲明它的地方,你必須附加專門的類型,如Collection<T>。然而,擴展協議不能用通用類型指定,因此最終無法提供TCollection

在你的情況雖然,T被約束爲Model型的,爲什麼不使用默認協議實現:

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