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

标签 json swift codable encodable

我已经构建了一组 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)
}

关于json - Swift 4 - 无法使用类型为 'encode' 的参数列表调用 '(Codable)',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53285100/

相关文章:

java - 如何在android中检索json数组?

ios - 在其他两个 View 之间垂直居中

json - 在 Swift 4 中序列化 JSON - 确定数据类型的问题

ios - 如何从 json Result In swift 中删除可选文本

sql - Postgresql JSON 列检查键是否存在

json - 如何使用 LinkedIn Share API 获取要显示的描述字段

java - Log4j 2 JSON 模式布局 + 记录 JSON 负载

swift - 使用 cloudkit ckqueryoperation 批量获取

swift - 为什么 Mac 上不显示本地通知?

swift - 将类型为 Any 的 Swift Encodable 类转换为字典