Swift 4-无法使用类型为“(Codable)”

时间:2018-11-13 16:12:02

标签: json swift codable encodable

我已经构建了一组API函数,这些函数对对象进行编码(使用符合Struct的{​​{1}}),然后将生成的JSON Data对象发布到服务器,然后解码JSON响应。一切正常-对Swift 4.2中的JSON解析新方法特别满意。但是,现在我想重构代码,以便可以将代码重用于各种方法调用-当我这样做时,我会得到一个非常烦人的错误。

Codable

这是错误消息:

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!
}

我尝试将类型从Codable更改为Encodable,但是除了消息中的类型为(Encodable)以外,都收到相同的错误。有什么建议吗?我的后备方法是在当前ViewController中对数据进行编码,然后调用HTTPPost函数,然后在VC中进行解码。但这确实很笨拙。

1 个答案:

答案 0 :(得分:6)

您需要将具体类型传递给JSONEncoder.encode,因此需要使函数具有Encodable类型约束的泛型(不需要Codable,它的限制太多)

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