使用编码协议解析JSON nil值

时间:2018-06-17 12:30:00

标签: ios json swift swift4

假设我有一个Opportunity课,带有一个可选的code字段

class Opportunity: Codable {

    let id: String
    let code: String?

    enum OpportunityKeys: String, CodingKey {

        case id = "opportunityId"
        case code = "opportunityCode"
    }

    required init(from decoder: Decoder) throws {

        let values = try decoder.container(keyedBy: OpportunityKeys.self)

        id = try values.decode(String.self, forKey: .id)
        if let code = try? values.decode(String.self, forKey: .code) {
            self.code = code
        }
    }
}

有没有办法比使用if let更好地解析nil值?

2 个答案:

答案 0 :(得分:1)

是的,还有更好的方法

code = try values.decodeIfPresent(String.self, forKey: .code)

尽可能避免使用try?

答案 1 :(得分:0)

是的,有。

由于code是可选的只需替换

if let code = try? values.decode(String.self, forKey: .code) {
    self.code = code
}

code = try? values.decode(String.self, forKey: .code)