2015-10-26 29 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 
    } 
} 
相关问题