我想知道是否有办法将字典映射到一个类。如果这是我的班级:
class Class{
var x = 0
var y = "hi"
}
这是我的字典(dict
),其类型为[String: Any]
["x": 1, "y": "hello"]
有没有简单的方法可以将字典的值转换为我的班级Class
?
我现在这样做:
classInstance.x = dict["x"] as? Int ?? 0
我想知道是否可以在JSON中搜索与类的变量名称匹配的键,如果匹配,则将JSON键的值赋给类的变量值。以我的方式(上图)我需要逐行输入,也许有一个单行将JSON映射到类中。
答案 0 :(得分:5)
包含JSONSerialization
和Codable
let dictionary : [String:Any] = ["x": 1, "y": "hello"]
class Class : Codable {
let x : Int
let y : String
}
do {
let jsonData = try JSONSerialization.data(withJSONObject: dictionary)
let instance = try JSONDecoder().decode(Class.self, from: jsonData)
print(instance.x, instance.y)
} catch {
print(error)
}
答案 1 :(得分:0)
这是我的功能最终看起来的样子。它接受任何符合Decodable的对象并从JSONData返回一个子类:)
import UIKit
class DecodeObject{
func decode<T: Decodable>(data: [String : Any], type: T.Type) -> T? {
do {
let jsonData = try JSONSerialization.data(withJSONObject: data)
return try JSONDecoder().decode(T.self, from: jsonData)
} catch {
return nil
}
}
}