使用 JSONDecoder 和 Swift 将 nil 转换为空字符串

Rob*_*ith 0 swift swift4 jsondecoder

我正在使用 Swift 4 和JSONDecoder. 我有以下结构:

struct Customer: Codable {
    var id: Int!
    var cnum: String!
    var cname: String!
}
Run Code Online (Sandbox Code Playgroud)

注意:这些字段不能是可选的。

现在我有一个 JSON 字符串:

[
    {
        "id": 1,
        "cnum": "200",
        "cname": "Bob Smith"
    },
    {
        "id": 2,
        "cnum": "201",
        "cname": null
    }
]
Run Code Online (Sandbox Code Playgroud)

为了对其进行解码,我使用以下命令:

let decoder = JSONDecoder()
let customers = try decoder.decode([Customer].self, from: json)
Run Code Online (Sandbox Code Playgroud)

除了空数据被转换为 nil 之外,一切正常。我的问题是,将传入的 nil 转换为空字符串(“”)的最简单方法是什么?

我想用最少的代码来做到这一点,但我不确定正确的方法以及在什么时候可以将 nil 转换为空字符串。预先谢谢你。

Cod*_*ent 5

您可以使用支持 ivars:

struct Customer: Codable {
    var id: Int
    var cnum: String {
        get { _cnum ?? "" }
        set { _cnum = newValue }
    }
    var cname: String {
        get { _cname ?? "" }
        set { _cname = newValue }
    }
    
    private var _cnum: String?
    private var _cname: String?
    private enum CodingKeys: String, CodingKey {
        case id, _cnum = "cnum", _cname = "cname"
    }
}
Run Code Online (Sandbox Code Playgroud)

由于自定义CodingKeys,JSON 解码器实际上会解码为_cnum_cname,它们是可选字符串。我们在属性 getter 中将 nil 转换为空字符串。