Swift 4 JSONDecoder 可选变量

Swift 4 JSONDecoder optional variable

我有一个 Codable 结构 myObj:

public struct VIO: Codable {

    let id:Int?;
    ...
    var par1:Bool = false; //default to avoid error in parsing
    var par2:Bool = false;    
}

当我收到 JSON 时,我没有 par1par2,因为这些变量是可选的。在解析过程中出现错误:keyNotFound(CodingKeys(stringValue: \"par1\", intValue: nil)

如何解决?

如果你有局部变量你必须指定 CodingKeys

public struct VIO: Codable {

    private enum CodingKeys : String, CodingKey { case id }

    let id:Int?
    ...
    var par1:Bool = false
    var par2:Bool = false  

}

编辑:

如果 par1par2 也应该解码,则您必须编写自定义初始化程序

  private enum CodingKeys : String, CodingKey { case id, par1, par2 }

   init(from decoder: Decoder) throws {
      let container = try decoder.container(keyedBy: CodingKeys.self)
      id = try container.decode(Int.self, forKey: .id)
      par1 = try container.decodeIfPresent(Bool.self, forKey: .par1)
      par2 = try container.decodeIfPresent(Bool.self, forKey: .par2)
  }

这是Swift:没有尾随分号