SwiftyJson ist praktisch, aber Codable, eine Standardfunktion der Swift-Tabelle, war auch einfach zu verwenden
Lassen Sie struct Codable erben, konvertieren Sie json in Daten und verwenden Sie dann JSONDecoder.decode. Die in Codable definierten Typinformationen und die Form von json müssen jedoch exakt identisch sein. Wenn daher auch nur ein JSON-Schlüssel fehlt, tritt ein Fehler auf.
var data = """
{
"name": "Bob",
"age": 20,
"sex": "male",
}
""".data(using: .utf8)!
struct User: Codable {
let name: String
let age: Int
}
let users: User = try JSONDecoder().decode(User.self, from: data)
users // User(name: 1, age: 20)
Ändern Sie die Strukturklasse wie folgt und initialisieren Sie sie in der Init-Funktion. In reiner Schnelligkeit geschrieben, ist es leicht zu verstehen.
var data = """
{
"name": "Bob",
"age": 20,
}
""".data(using: .utf8)!
class User: Codable {
var name: String
var age: Int
var sex: String? //Sex ist nicht in json!
required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.name = try container.decodeIfPresent(String.self, forKey: .name) ?? nil
self.age = try container.decodeIfPresent(Int.self, forKey: .age) ?? nil
self.sex = try container.decodeIfPresent(String.self, forKey: .sex) ?? nil
}
}
let users: User = try JSONDecoder().decode(User.self, from: data)
users // User(name: "Bob", age: 20, sex: nil)
Codable ist im Vergleich zu Swifty Json nicht schlecht.
Recommended Posts