【问题标题】:Alamofire: send parameterAlamofire:发送参数
【发布时间】:2017-08-01 11:52:49
【问题描述】:

我想像这样将数据作为参数发布:

{ 
    "data":
    [
        {
            "nik" : "lalaal"
        }
    ]
}

如何在 Swift 3 中使用 Alamofire 写入这些参数?

我试过了:

let parameter: Parameters = [
                "data":[[
                    "nik" : self.nik,
                    "check_type" : "IN",
                    "tanggal" : "01-08-2017 18:22:00",
                    "long" : String(locationList[projectChoosen].long!),
                    "lat" : String(locationList[projectChoosen].lat!),
                    "id_loc" : locationList[projectChoosen].id_project,
                    "id_project" : nil,
                    "nama_project" : locationList[projectChoosen].nama_project,
                    "barcode" : "",
                    "foto": "",
                    "mime_type" : "image/jpeg"

                    ]]
            ]

【问题讨论】:

  • 显示你尝试过的代码
  • 试试这个:Alamofire.request("url", method: .post, parameters: parameters, encoding: JSONEncoding.default)

标签: ios swift3 alamofire


【解决方案1】:

您可以使用以下代码。

let dicRequest: NSDictionary = ["userid" : "test", "password" : "test123"]

let postParams:NSDictionary = [
    "data": dicRequest
]
let requestURL: String = String(format: "%@/Login", serverURL)
Alamofire.request(requestURL, method: .post, parameters: postParams as? [String : AnyObject], encoding: JSONEncoding.default, headers: [:])
    .responseJSON { response in switch response.result {

    case .success(let JSON):
        print("response :-----> ",response)
    case .failure(let error):
        print("Request failed with error: \(error)")

        }
}

【讨论】:

    【解决方案2】:

    你可以先在这个格式中创建一个 Dictionary 对象

    { 
       "data":
       [
           {
               "nik" : "lalaal"
           }
       ]
    }
    

    之后,您可以使用 NSJSONSerlisation 将其转换为 json 字符串 而不是使用 Almofire 发布。

    let array: [[String: String]] = [["nik": "lalaal"]]
    let data =  try JSONSerialization.data(withJSONObject: array, options: JSONSerialization.WritingOptions.prettyPrinted)
    let string = String(data: data, encoding: String.Encoding.utf8)
    let postParam: [String: String] = ["data": string]
    
    let _ = Alamofire.request(apiType.url!, method: apiType.type!,parameters: postParam, encoding: JSONEncoding.prettyPrinted, headers: nil).validate(statusCode: 200..<500).responseJSON { (response) in
    
    }
    

    【讨论】:

      【解决方案3】:

      这是一个使用 Alamofire 并将字典作为参数发布的示例请求:

      let dataArray: [[String: String]] = [["nik": "lalaal"]]
      let param: [String: [Any]] = ["data": dataArray]    
      Alamofire.request(url, method: .post, parameters: param, encoding: JSONEncoding.default, headers: nil).responseJSON { response in }
      

      【讨论】:

        【解决方案4】:

        我用:

        let dataIn: [String: String] = ["param1": "value1"]
        let paramGo: [String: [String: String]] = ["data_title": dataIn]    
        Alamofire.request(url, method: .post, parameters: paramGo, encoding: JSONEncoding.default, headers: nil).responseJSON { response in }
        

        【讨论】: