2017-09-26 52 views
0

我有一个NSObject类JSON编码NSObject NOT结构?

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

这是保持一个数组

let prices = [InventPricing]() 

试图编码阵列上encoder.encode JSON字符串

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 ) ") 

得到错误(价格)行

致命错误:Array not confo RM到可编码,因为InventPricing不符合可编码:

所有我能找到的是编码结构不是NSObject类

请帮帮忙! 在此先感谢

+0

尝试这个【答案】(HTTPS: //stackoverflow.com/a/47531466/6822622)。 [NSObject]传达到字符串或数据 – AshvinGudaliya

回答

1

的过程实际上是类和结构相同,目前的格局是使用结构为,虽然数据模型......

你只需要符合协议:

class InventPricing: NSObject, Encodable { … 

如果你想两者兼得转换:

class InventPricing: NSObject, Codable { … 

欲了解更多信息请查看the documentation。它在所有的例子中都使用了结构,但是它从来没有说过它只能在结构上起作用,并且使用可以是结构或类的术语“类型”。

+0

谢谢我做了文档显示现在我得到无法将类型'Foundation.JSONEncoder'(0x101863830)的值转换为'Swift.Encoder'(0x109711298)。 2017-09-26 15:13:10.188008-0400 EEDS4 [7129:3964368]无法将类型'Foundation.JSONEncoder'(0x101863830)的值转换为'Swift.Encoder'(0x109711298)。 – NewDev

+0

@NewDev你的新代码是什么样的? –

0

使用这个扩展到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的转换为[字符串:任何] - 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)") 
} 

Refer My Another Ans.