gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 00:19:37 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com