Swift中json转model报No value associated with key CodingKeys

在网络请求中,json转模型是最常见的操作了,在OC时代,我们通常用MJExtension进行转换。在Swift中,数据转换更加方便,只要模型遵循Codable协议,就可以原生进行转换。
例如,定义的模型如下:

struct SomeModel: Codable {
    var name: String?
    var size: Int?
}

服务器返回的数据是酱紫:

{
    "name": "lesson",
    "size": 10
}

然后我们可以进行data->struct的转换

let data = response.data
do {
    let decoder = JSONDecoder()
    //解析数据
    self.model = try decoder.decode(SomeModel.self, from: data)
} catch let err {
    print("Err ", err)
}

但是问题来了,有时候这个模型还需要别的存储属性,例如你需要一个名字为“is_show”的属性,默认值为false,于是struct改成了:

struct SomeModel: Codable {
    var name: String?
    var size: Int?
    var is_show: Bool = false
}

乍一看好像没有问题,但是一运行,Xcode就报No value associated with key CodingKeys,认真想了一下,原来是把is_show赋初值后就忘记加上“?”了,这样它就不是可选类型,但是返回的数据中又没有这个字段,所以就报错了。因此,一个struct的存储属性应该都定义为可选类型。为了方便和安全,同时也应该赋初值。
最后修改成:

struct SomeModel: Codable {
    var name: String? = ""
    var size: Int? = 0
    var is_show: Bool? = false
}

你可能感兴趣的:(Swift中json转model报No value associated with key CodingKeys)