可解码:无法推断通用参数 'T'

Decodable: Generic parameter 'T' could not be inferred

我已经盯着这个看了一段时间了,我似乎无法弄清楚如何帮助编译器。我想让这些函数通用,以便它们可以重用。

我删除了函数内部的所有内容以及调用 makeServiceCall 的位置,但我仍然看到错误:

Generic parameter 'T' could not be inferred

public func sendURLRequest<T: Decodable>(url: URL, completion: @escaping (Result<T, Error>) -> Void) {

}

public func makeServiceCall<T: Decodable>(url: URL, _ completion: @escaping (T)-> Void ) {
    sendURLRequest(url: url){ response in
    }
}

如果我将 T 添加到 sendURLRequest sendURLRequest<T>(url: url) 我会看到警告:

Cannot explicitly specialize a generic function

sendURLRequest<T: Decodable> returns 另一个错误:

Binary operator '<' cannot be applied to operands of type '(URL, @escaping (Result<_, Error>) -> Void) -> ()' and 'T.Type'

感谢您的帮助!我在 iOS 13

在这种情况下编译器无法推断类型,因此您需要显式指定它:

public func makeServiceCall<T: Decodable>(url: URL, _ completion: @escaping (T)-> Void ) {
    sendURLRequest(url: url) { (response: Result<T, Error>) in
    }
}