Je reçois l'erreur suivante:
Generic parameter 'T' could not be inferred
en ligne: let data = try encoder.encode(obj)
Voici le 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)!)
Qu'est-ce que je fais mal?
Ce message est trompeur, la vraie erreur est que obj
est de type [String: Any]
, qui n'est pas conforme à Codable
parce que Any
ne l'est pas.
Quand on y pense, Any
ne peut jamais se conformer à Codable
. Qu'est-ce que Swift utilisera pour stocker l'entité JSON lorsqu'elle peut être un entier, une chaîne ou un objet? Vous devez définir une structure appropriée pour contenir vos données.