使用泛型类型时,如何使用默认参数扩展Swift协议?

使用泛型类型时,如何使用默认参数扩展Swift协议?,swift,default-value,swift-protocols,Swift,Default Value,Swift Protocols,我有一个协议,就像 protocol QueryProtocol { associatedtype Data } protocol DataFetcher { func fetch<Query: QueryProtocol, Output>( query: Query, parser: (Query.Data) -> Output, completionHandler: (Output) -> Void ) } 协议查询协议{ 关联

我有一个协议,就像

protocol QueryProtocol {
  associatedtype Data
}

protocol DataFetcher {
  func fetch<Query: QueryProtocol, Output>(
    query: Query,
    parser: (Query.Data) -> Output,
    completionHandler: (Output) -> Void
  )
}
协议查询协议{
关联类型数据
}
协议数据获取程序{
函数取数(
查询:查询,
解析器:(Query.Data)->输出,
completionHandler:(输出)->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)
  }
}
扩展数据获取程序{
函数取数(
查询:查询,
解析器:(Query.Data)->Output={$0},//无法将“Query.Data”类型的值转换为闭包结果类型“Output”
completionHandler:(输出)->Void
) {
获取(查询:查询,解析器:解析器,completionHandler:completionHandler)
}
}
但是编译器失败,
无法将“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)
    }
}
扩展数据获取程序{
函数取数(
查询:查询,
completionHandler:(输出)->Void
)
其中Query.Data==输出
{
获取(查询:查询,解析器:{$0},completionHandler:completionHandler)
}
}