使用可解码协议在init中解析json

使用可解码协议在init中解析json,json,swift,swift4,decodable,Json,Swift,Swift4,Decodable,我想在我的模型的init中解析json文件。我希望它获取URL并初始化所有存储的属性。比如: init(从url:url){…} 所以问题是我该怎么做?我试着这样做: let info=try JSONDecoder().decode(Model.self,from:data) 但它只是创建了一个新对象,看起来是一个糟糕的决定 谢谢。我用您想要的init类型创建了一个可编码结构: struct NameObject: Codable { let id: Int let name:

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

init(从url:url){…}

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

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

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


谢谢。

我用您想要的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
        }
    }
}

self=try JSONDecoder…顺便说一句,您的init需要抛出,最好使用数据而不是URL删除do try catch并使您的init抛出。创建一个无用的对象没有任何意义。如果不使用它,为什么会捕捉到错误。最好做一个容易出错的初始值设定项我并没有考虑如何编写最好的初始值,而是考虑如何解决OP问题。顺便说一句,你可以编辑我的答案,如果你想;)