1

我正在重构一些以前使用第三方 JSON 解析器的项目,并且遇到了一个返回布尔值作为字符串的愚蠢站点。

这是 JSON 响应中的相关片段:

{
    "delay": "false",
    /* a bunch of other keys*/
}

我的解码结构如下所示:

struct MyJSONStruct: Decodable {
  let delay: Bool
  // the rest of the keys
}

如何将 JSON 响应中返回的字符串转换为 Bool 以匹配我在 Swift 4 中的结构?虽然这篇文章很有帮助,但我不知道如何将字符串响应转换为布尔值。

4

2 回答 2

10

基本上你必须编写一个自定义初始化程序,但是如果有很多好的键但只有一个可以从一个类型映射到另一个,那么计算属性可能会很有用

struct MyJSONStruct: Decodable {
   var delay: String
   // the rest of the keys

   var boolDelay : Bool {
       get { return delay == "true" }
       set { delay = newValue ? "true" : "false" }
   }
}
于 2017-10-20T13:34:11.290 回答
1

您需要在 URLEncoding 初始化程序中设置 boolEncoding: .literal。

boolEncoding: .literal
于 2020-02-12T11:44:48.647 回答