2017-10-20 3 views
0

Ich Refactoring einige Projekte, wo ich zuvor JSON-Parser von Drittanbietern verwendet hatte, und ich habe eine doof Website gefunden, die einen booleschen als Zeichenfolge zurückgegeben.Konvertieren Zeichenfolge JSON-Antwort auf einen Boolean mit Swift 4 Decodable

Dies ist der entsprechende Ausschnitt aus der Antwort JSON:

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

Meine Struktur für die Decodierung wie folgt aussieht:

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

Wie würde ich konvertieren die Zeichenfolge in der JSON-Antwort in eine Bool zurück passend zu meiner Struktur in Swift 4? Während this post hilfreich war, kann ich nicht herausfinden, wie man eine String-Antwort in einen booleschen Wert verwandelt.

+2

Überschreibung 'init (Decoder sein: Decoder) 'und handle die gesamte Decodierung manuell. Ich sage alles, weil Sie nicht optional einige Felder und nicht andere decodieren können. – Brandon

+0

Autsch. Ich habe ~ 20 Schlüssel mit einigen verschachtelten Strukturen, alle für einen booleschen Wert. – Adrian

+2

Vergleichen https://stackoverflow.com/q/44594652/2976878 – Hamish

Antwort

3

Grundsätzlich müssen Sie eine benutzerdefinierte initializer schreiben, aber wenn es viele gute Tasten sind aber nur eine von einem Typ in einen anderen eine berechnete Eigenschaft zuordnen könnte nützlich

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

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

Oh! Das ist hervorragend! Ich würde lieber 3 Zeilen Code hinzufügen als ein benutzerdefinierter Initialisierer. Vielen Dank! – Adrian

+0

@LeoDabus Ich habe das 'let' in ein' var' geändert. Nochmals vielen Dank für diese einfache Problemumgehung. – Adrian

Verwandte Themen