我在操场上有以下示例代码。如果网络请求的结果符合Decodable
协议,我想对该结果进行解码。
您知道为什么此代码不起作用吗?
protocol APIRequest {
associatedtype Result
}
func execute<T: APIRequest>(request: T) {
if let decodableResult = T.Result.self as? Decodable {
try JSONDecoder().decode(decodableResult, from: Data())
}
}
我在此行上收到错误Cannot invoke 'decode' with an argument list of type '(Decodable, from: Data)'
:try JSONDecoder().decode(decodableResult, from: Data())
任何输入都将不胜感激!
答案 0 :(得分:1)
JSONDecoder.decode(_:from:)
方法需要一个符合Decodable
的具体类型作为其输入参数。您需要向T.Result
添加一个额外的类型约束以使其成为Decodable
。
func execute<T: APIRequest>(request: T) throws where T.Result: Decodable {
try JSONDecoder().decode(T.Result.self, from: Data())
}
尝试解码空的Data
实例有什么意义?