I am getting the following error:
Generic parameter 'T' could not be inferred
on line: let data = try encoder.encode(obj)
Here is the code
import Foundation
struct User: Codable {
var firstName: String
var lastName: String
}
let u1 = User(firstName: "Ann", lastName: "A")
let u2 = User(firstName: "Ben", lastName: "B")
let u3 = User(firstName: "Charlie", lastName: "C")
let u4 = User(firstName: "David", lastName: "D")
let a = [u1, u2, u3, u4]
var ret = [[String: Any]]()
for i in 0..<a.count {
let param = [
"a" : a[i],
"b" : 45
] as [String : Any]
ret.append(param)
}
let obj = ["obj": ret]
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try encoder.encode(obj) // This line produces an error
print(String(data: data, encoding: .utf8)!)
What am I doing wrong?
That message is misleading, the real error is that obj is of type [String: Any], which does not conform to Codable because Any does not.
When you think about it, Any can never conform to Codable. What will Swift use to store the JSON entity when it can be an integer, a string, or an object? You should define a proper struct to hold your data.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With