2017-10-20 109 views
0

我重构了以前使用过第三方JSON解析器的一些项目,并且遇到了将布尔值作为字符串返回的愚蠢网站。使用Swift将字符串JSON响应转换为布尔值4可解码

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

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

我对解码结构是这样的:

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

我将如何转换返回的JSON响应转换为布尔字符串在Swift 4中匹配我的结构?虽然this post很有帮助,但我无法弄清楚如何将字符串响应转换为布尔值。

+2

覆盖'初始化(解码器:解码器)'并手动处理所有的解码。我说全是因为你不能解码某些字段而不是其他字段。 – Brandon

+0

哎。我有一些嵌套结构的〜20个键,全部用于一个布尔值。 – Adrian

+2

比较https://stackoverflow.com/q/44594652/2976878 – Hamish

回答

3

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

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

    var boolDelay : Bool { 
     get { return delay == "true" } 
     set { delay = newValue ? "true" : "false" } 
    } 
} 
+0

哦!太精彩了!我宁愿添加3行代码,而不是自定义初始化程序。谢谢! – Adrian

+0

@LeoDabus我把'let'改成了'var'。再次感谢这个简单的解决方法。 – Adrian