2017-10-20 91 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