使用alamofire发送一系列词典

Nem*_*mmo 6 request ios alamofire

我必须通过POST请求发送字典数组。例如:

materials: [[String, String]] = [
  [
    "material_id": 1,
    "qty": 10
  ],
  [
    "material_id": 2,
    "qty": 5
  ]
]
Run Code Online (Sandbox Code Playgroud)

Alamofire.request发送下一个帖子数据:

materials => array(
  [0] => array("material_id" => 1),
  [1] => array("qty" => 10),
  [2] => array("material_id" => 2),
  [3] => array("qty" => 5),
)
Run Code Online (Sandbox Code Playgroud)

我想收到该代表:

materials => array(
  [0] => array(
    "material_id" => 1,
    "qty" => 10
  ),
  [1] => array(
    "material_id" => 2,
    "qty" => 5
  ),
)
Run Code Online (Sandbox Code Playgroud)

Nem*_*mmo 6

问题出在append方法中。我已经用PHP编写了5年的代码,却忘记了在Swift中不会像在PHP中那样自动分配索引。因此,我的第一个错误代码是:

func getParameters() -> [[String: AnyObject]] {
    var result = [[String: AnyObject]]()

    for mmap in mmaps {
        let material: [String: AnyObject] = [
            "material_id": mmap.material.id,
            "quantity": mmap.qty
        ]
        result.append(material)
    }

    return result
}
Run Code Online (Sandbox Code Playgroud)

答案是很难根据需要分配密钥:

func getParameters() -> [String: [String: AnyObject]] {
    var result = [String: [String: AnyObject]]()

    let mmaps = self.mmaps.allObjects as [Mmap]
    for i in 0..<mmaps.count {
        let mmap = mmaps[i]
        let material: [String: AnyObject] = [
            "material_id": mmap.material.id,
            "quantity": mmap.qty
        ]
        result["\(i)"] = material
    }

    return result
}
Run Code Online (Sandbox Code Playgroud)