1

I have a Codable struct myObj:

public struct VIO: Codable {

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

When I do receive JSON, I don't have par1 and par2 since these variables are optional. During parsing I get an error:keyNotFound(CodingKeys(stringValue: \"par1\", intValue: nil)

How to solve this?

4

1 回答 1

2

如果您有局部变量,则必须指定CodingKeys

public struct VIO: Codable {

    private enum CodingKeys : String, CodingKey { case id }

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

}

编辑:

如果par1并且par2应该也可以选择解码,则必须编写自定义初始化程序

  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:没有尾随分号

于 2018-04-07T16:35:39.057 回答