Swift 4 - 无法使用“(Codable)”类型的参数列表调用 'encode'
Swift 4 - Cannot invoke 'encode' with an argument list of type '(Codable)'
我构建了一组 API 函数来编码对象(使用符合 Codable
的 Struct
),然后发布生成的 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)
}
我构建了一组 API 函数来编码对象(使用符合 Codable
的 Struct
),然后发布生成的 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)
}