![](/img/trans.png)
[英]How to make generic protocol not generic in Swift? So I can use it as parameter type
[英]How can I extend a Swift protocol with a default parameter when using generic types?
我有一個類似的協議
protocol QueryProtocol {
associatedtype Data
}
protocol DataFetcher {
func fetch<Query: QueryProtocol, Output>(
query: Query,
parser: (Query.Data) -> Output,
completionHandler: (Output) -> Void
)
}
我想擴展協議並為解析器提供一個默認值作為身份。 所以我試過了
extension DataFetcher {
func fetch<Query: QueryProtocol, Output>(
query: Query,
parser: (Query.Data) -> Output = { $0 }, // Cannot convert value of type 'Query.Data' to closure result type 'Output'
completionHandler: (Output) -> Void
) {
fetch(query: query, parser: parser, completionHandler: completionHandler)
}
}
但編譯器失敗, Cannot convert value of type 'Query.Data' to closure result type 'Output'
有什么方法可以指定默認情況下Query.Data
= Output
有什么方法可以指定默認情況下Query.Data
= Output
不。
但是,您可以定義僅適用於Query.Data
= Output
的重載:
extension DataFetcher {
func fetch<Query: QueryProtocol, Output>(
query: Query,
completionHandler: (Output) -> Void
)
where Query.Data == Output
{
fetch(query: query, parser: { $0 }, completionHandler: completionHandler)
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.