Swift 4 - 无法使用类型为 '(Codable)' 的参数列表调用'encode'



我构建了一组API函数,这些函数对对象进行编码(使用符合CodableStruct(,然后将生成的JSON数据对象发布到服务器,然后对JSON响应进行解码。一切都很好——尤其是Swift 4.2中的JSON解析新方法。然而,现在我想重构代码,这样我就可以在各种方法调用中重用代码——当我这样做时,我会遇到一个非常烦人的错误。

func encodeRequestJSON(apiRequestObject: Codable) -> Data {
    do {
        let encoder = JSONEncoder()
        let jsonData = try encoder.encode(apiRequestObject)
        let jsonString = String(data: jsonData, encoding: .utf8)
        print(jsonString)
    } catch {
        print("Unexpected error")
        }
    return jsonData!
}

这是错误消息:

Cannot invoke 'encode' with an argument list of type '(Codable)'

我已经尝试将类型从Codable更改为Encodable,但得到了相同的错误,除了消息中的类型(Encodable(。有什么建议吗?我的后顾之忧是在当前的ViewController中对数据进行编码,然后调用HTTPPost函数,然后在VC中进行解码。但这真的很麻烦。

您需要一个具体的类型传递到JSONEncoder.encode中,因此您需要使函数具有对Encodable的类型约束的泛型(不需要Codable,它的限制性太强(。

func encodeRequestJSON<T:Encodable>(apiRequestObject: T) throws -> Data {
    return try JSONEncoder().encode(apiRequestObject)
}

相关内容

  • 没有找到相关文章

最新更新