Search code examples
swiftdictionaryswift3alamofire

Alamofire multi parameters dictionary


Hi i am trying to give to alamofire parameters called "addons" that are in array...array can contain 3 or X items. I am trying to use FOR cycle to ad dictionary to another another one set of items, but...it only shows the last one...that seems it override the previous one. I tried everything I know...Even try to use SwiftyJSON framework....but alamofire only take pure dictionary type.

    let itemsArr = ["Skirts", "Coat", "Shirt"]
    let priceArr = ["7.00", "7.00", "2.90"]
    let quantityArr = ["2", "5", "1"]

    let personalInfo: [String : Any] = [
        "phone" : phone,
        "notes" : descNote
    ]

    var para: [String: Any] = [
        "pieces" : pieces,
        "personal_info" : personalInfo,
        "payment_method" : paymentMethod
    ]

    for i in 0..<itemsArr.count {
        let addons: [String: Any] = [
            "name":itemsArr[i],
            "price":priceArr[i],
            "quantity":quantityArr[i]
        ]
        print(addons)
        para["addons"] = addons
    }

well I need something like this

{
  "pieces": 12,
  "personal_info": {
    "phone": "+420783199102",
    "notes": "Plz be fast, I need to play Game of War"
  },
  "payment_method": "cod",
  "addons": [
    {
      "name": "Select day Tue",
      "price": 3.5,
      "quantity": 1
    },
    {
      "name": "Select day Thu",
      "price": 3.5,
      "quantity": 1
    }
  ]
}

Solution

  • Your problem is that in loop you are overwriting variable every single iteration with single result. That's why only last one is left for you. What you should do is:

    //create an array to store the addons outside of the loop
    var addons: [[String: Any]] = []
    for i in 0..<itemsArr.count {
        let addon: [String: Any] = [
            "name":itemsArr[i],
            "price":priceArr[i],
            "quantity":quantityArr[i]
        ]
        //append a single addon to our array prepared before the loop
        addons.append(addon)
    }
    //once we gathered all addons, append results to `para` dictionary
    para["addons"] = addons