使用Decodable协议在init中解析json

时间:2017-10-19 14:17:03

标签: json swift swift4 decodable

我想在我的模型的init中解析json文件。我希望它获取URL并初始化所有存储的属性。像:

init(from url: URL) { ... }

所以问题是我该怎么办?我试着这样做:

let info = try JSONDecoder().decode(Model.self, from: data)

但它只是创建了一个新对象,看起来是一个糟糕的决定。

感谢。

1 个答案:

答案 0 :(得分:0)

我用你想要的init类创建了一个可编码的结构:

struct NameObject: Codable {
    let id: Int
    let name: String
    enum CodingKeys: String, CodingKey {
        case id
        case name
    }

    init(id: Int, name: String) {
        self.id = id
        self.name = name
    }

    init(withData data: Data) {
        do {
            self = try JSONDecoder().decode(NameObject.self, from: data)
        } catch {
            self.id = 0
            self.name = "unknown"
            // error
        }
    }
}