2016-08-11 3 views
-1

ich JSON wie diese erstellen müssen, aber mein Code funktioniert nicht:Wie struct konvertieren Swift JSon

{ 
    "room": "string", 
    "products": [{ 
     "name": "string", 
     "quantity": 0 
    }], 
    "observations": "string", 
    "date": "dd-mm-yyyy hh:mm:ss" 
}

ich diese Struktur zu JSON konvertieren müssen, und mein Code:


struct Products: JSONSerializable { 
    let name: String 
    let quantity: Int 
} 
struct Pedido: JSONSerializable{ 
    let room: String 
    let products: Array 
    let observations: String 
    let date: NSDate 
} 

dieser Code funktioniert nicht, Rückkehr null in log:


let JSONPedido = Pedido(room: receivedString, 
         products: products, 
         observations: observationString!, 
         date: date).ToJSON() 
+0

Check: http://www.sthoughts.com/2016/06/30/swift-3-serializing-swift-structs-to-json/ und http://codelle.com/blog/2016/5/an-easy-to-convert-swift-structs-to-json/ –

+1

'JSONSerializable' ist nicht Teil von Swift. Wenn Sie eine Bibliothek von Drittanbietern wie Alamofire verwenden, sollten Sie dies in Ihrer Frage erläutern (verwenden Sie den Link [Bearbeiten]). Ich nehme an, dass Ihr nicht funktionierendes '.ToJSON()' auch davon kommt. – Moritz

Antwort

0

Mit structs Sie auch eine Variable erstellen, die als Wörterbuch repr handeln Darstellung des Strukturwertes. In diesem Fall würde es so aussehen:

struct Pedido { 
    let room: String 
    let products: Array 
    let observations: String 
    let date: NSDate 
    var pedidoJSON: [String: AnyObject] { 
     return ["room" : room, "products": products, "observations": observations, "date": date] 
    } 
} 

Und dann, wenn Sie den JSON-Wert benötigen, können Sie es wie so zugreifen.

//assuming you already have a pedido instance 
let pedidoJson = pedidoInstance.pedidoJSON 
+0

Hey Mann, danke. Ich kann die pedidoJSON os struct nicht erstellen ... diese args "let" Deklarationen können nicht berechnet werden Eigenschaften –

+1

Sorry berechnete Eigenschaften müssen Variablen sein! – pbush25

+0

@ pbush25 Ihre Lösung funktioniert, aber denken Sie nicht, OP sollte JSONSerializable verwenden, da sie bereits damit konform sind? Oder sie sollten sich nicht daran halten, wenn sie es nicht benutzen ...: p – Moritz