首页 文章

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

提问于
浏览
1

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

  • 2

    你需要一个具体的类型传递到 JSONEncoder.encode ,所以你需要在 Encodable 上使用类型约束使你的函数通用(不需要 Codable ,它限制太多) .

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

相关问题