2017-09-26 51 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.