繁体   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