我已经构建了一组API函数来编码对象(使用 Struct
符合 Codable
),然后将生成的JSON Data对象发布到服务器,然后解码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中进行解码 . 但那真是笨重 .
1 回答
你需要一个具体的类型传递到
JSONEncoder.encode
,所以你需要在Encodable
上使用类型约束使你的函数通用(不需要Codable
,它限制太多) .