无法使用类型为“(可解码,来自:数据)”的参数列表调用“解码”

时间:2019-01-22 11:41:52

标签: swift generics associated-types jsondecoder

我在操场上有以下示例代码。如果网络请求的结果符合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())

任何输入都将不胜感激!

1 个答案:

答案 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实例有什么意义?