首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Swift 4 JSONDecoder可选变量

Swift 4 JSONDecoder可选变量
EN

Stack Overflow用户
提问于 2018-04-07 16:29:17
回答 1查看 2.9K关注 0票数 2

我有一个Codable结构myObj

代码语言:javascript
复制
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)

如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-07 16:35:39

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

代码语言:javascript
复制
public struct VIO: Codable {

    private enum CodingKeys : String, CodingKey { case id }

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

}

编辑:

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

代码语言:javascript
复制
  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:无尾随分号

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49709518

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档