2016-02-05 22 views
2

数据模型转换阵列数据模型到字典(SWIFT)

class DataCart { 
    var icon: UIImage? 
    var cartId: String 
    var price: Int 
    var productName: String 
    var quantity: Int 


init(icon: UIImage?, cartId: String, price: Int, productName: String, quantity: Int){ 
    self.icon = icon 
    self.cartId = cartId 
    self.price = price 
    self.productName = productName 
    self.quantity = quantity 

    } 
} 

字典

var cart = [DataCart]() 

"products": [[ 
    "productName": "Photobook", //"dataCart.productName" 
    "quantity": 2, //"dataCart.quantity" 
    "price": "5000.00", //"dataCart.price" 
    "pages": 40 
    ],[ 
    "productName": "Photobook2", 
    "quantity": 5, 
    "price": "7000.00", 
    "pages": 30 
    ]] 

for dataCart in cart { 
........ 
} 

我已经从数据模型阵列我想它显示为字典,我很困惑改变它。如何将购物车的数组(DataCart)转换为字典?

回答

2
var allDictionaries : [[String : AnyObject]]//array of all dictionaries. 

    func convertArrayToDictionaries([DataCart]) { 
     for data in DataCart { 
      let dictionary = [ 
      "icon" : data.icon, 
      "cartId" : data.cartId, 
      "price" : data.price, 
      "productName" : data.productName, 
      "quantity" : data.quantity 
      ] 
      allDictionaries.append(dictionary) 
     } 
} 
+0

为什么它显示“让字典行中没有更多上下文的表达式类型不明确”? @ NSGangster –

+0

现在它的一切都很好,只需添加[String:AnyObject]让字典。谢谢你btw! –

3

在课堂上进行转换是个好习惯。

所以在未来如果你有更多的钥匙,你只需要改变在课堂上的水平,而不是改变你使用相同的所有地方。

在课堂中添加一个计算出的属性dictionayDataCart,如下所示。 另外添加一个方法“convertDataCartArrayToProductsDictionary:”,它会将您的对象数组转换为字典。

class DataCart { 
     var icon: UIImage? 
     var cartId: String 
     var price: Int 
     var productName: String 
     var quantity: Int 


     init(icon: UIImage?, cartId: String, price: Int, productName: String, quantity: Int){ 
      self.icon = icon 
      self.cartId = cartId 
      self.price = price 
      self.productName = productName 
      self.quantity = quantity 

     } 

     var dictionaryDataCart : [String : AnyObject] { 

      var objDict : [String : AnyObject]! 

      if let icon = self.icon { 
       objDict["icon"] = icon; 
      } 

      objDict["cartId"] = self.cartId; 
      objDict["price"] = price; 
      objDict["productName"] = productName; 
      objDict["quantity"] = quantity; 

      return objDict; 
     } 

     class func convertDataCartArrayToProductsDictionary(arrayDataCart : [DataCart]) -> Dictionary<String,AnyObject> { 
      var arrayDataCartDictionaries : Array<Dictionary<String,AnyObject>> = Array() 
      for objDataCart in arrayDataCart { 
       arrayDataCartDictionaries.append(objDataCart.dictionary); 
      } 
      return ["products" : arrayDataCartDictionaries]; 
     } 

     } 

使用方法如下。

let arrayDataCarts : [DataCart] = //value of your array 
//pass it to class function and you will get your result 

let productsDict = let productsDict = DataCart.convertDataCartArrayToProductsDictionary(arrayDataCarts);