将字典[String:Any]映射到类

时间:2018-03-17 14:55:58

标签: json swift

我想知道是否有办法将字典映射到一个类。如果这是我的班级:

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映射到类中。

2 个答案:

答案 0 :(得分:5)

包含JSONSerializationCodable

的内置解决方案
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
        }
    }

}