2017-09-26 2 views
0

J'ai une classe NSObjectJSON Encode NSObject NOT struct?

class InventPricing: NSObject { 
    var quantity: NSNumber = NSNumber(value: 00.00) 
    var cost:  NSNumber = NSNumber(value: 00.00) 
    var total:  NSNumber = NSNumber(value: 00.00) 
} 

qui est conservé comme un tableau

let prices = [InventPricing]() 

encodez le tableau en tant que JSON chaîne

print("Insert Inv List 1    \(prices) ") 
let encoder = JSONEncoder() 
encoder.outputFormatting = .prettyPrinted 
let info = try! encoder.encode(prices) 
print("Insert Inv List 1    \(info ) ") 
let str = String(data: info, encoding: .utf8)! 
print("Insert Inv List 1    \(str ) ") 

Obtenir erreur sur la encoder.encode (prix) ligne

erreur fatale: Array ne confo rm à codable parce InventPricing ne se conforme pas codable .:

Tout ce que je peux trouver encode une struct pas une classe

NSObject

S'il vous plaît aider! Merci à l'avance

+0

Essayez cette [réponse] (https: //stackoverflow.com/a/47531466/6822622). [NSObject] convet à la chaîne ou aux données – AshvinGudaliya

Répondre

1

Le processus est en fait la même chose pour les classes et struct, la tendance actuelle est d'utiliser struct pour le modèle de données si ...

Vous avez juste besoin de se conformer au protocole:

class InventPricing: NSObject, Encodable { … 

Si vous voulez convertir dans les deux sens:

class InventPricing: NSObject, Codable { … 

pour plus d'informations consultez the documentation. Il utilise des structs dans tous les exemples mais il ne dit jamais qu'il ne fonctionne que sur les structures et utilise le terme 'type' qui peut être une structure ou une classe.

+0

Merci j'ai fait comme la documentation a montré maintenant je ne pourrais pas jeter la valeur de type «Foundation.JSONEncoder» (0x101863830) à «Swift.Encoder» (0x109711298). 2017-09-26 15: 13: 10.188008-0400 EEDS4 [7129: 3964368] Impossible de convertir la valeur du type 'Foundation.JSONEncoder' (0x101863830) en 'Swift.Encoder' (0x109711298). – NewDev

+0

@NewDev A quoi ressemble votre nouveau code? –

0

utiliser cette extension pour convertir NSObject à [String: Any]

//NSObject convert in to [String: Any] 
extension NSObject { 
    @objc func toDict() -> [String: Any] { 
     var dict: [String: Any] = [:] 

     for chiled in Mirror(reflecting: self).children { 
      dict[chiled.label!] = chiled.value 
     } 

     return dict 
    } 
} 

NSObject Pour [Chaîne: Tous] - yourObject.toDict()

// [String: Any] to Data 
do { 
    let jsonData = try JSONSerialization.data(withJSONObject: prices.toDict() , options: [.prettyPrinted]) 
} catch let error { 
    print("json serialization error: \(error)") 
} 

et aussi Refer My Another Ans.