2017-10-20 6 views
0

以前はサードパーティのJSONパーサを使用していたプロジェクトをリファクタリングしていて、ブール値を文字列として返すグーフィーサイトが発生しました。Swift 4 Decodableを使用して文字列JSON応答をブール値に変換する

これは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

オーバーライド 'のinit(デコーダかもしれません:デコーダー) 'を呼び出し、すべてのデコードを手動で処理します。私はあなたがオプションでいくつかのフィールドをデコードすることができないため、すべてを言う。 – Brandon

+0

私はいくつかのネストされた構造体を持つ〜20個のキーを持っています。すべてが1つのブール値です。 – 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

関連する問題