在Alamofire POST请求中将数组作为参数发送

我的应用程序当前正在使用AWS API Gateway和Alamofire来访问充当我后端的不同lambda函数。

我需要将一个数组作为参数之一发送到其中一个API端点,因为我使用以下代码:

var interests : [String] interests = globalInterests.map({ (interest) -> String in return interest.id! }) // Parameters needed by the API let parameters: [String: AnyObject] = [ "name" : name, "lastName" : lastName, "interests" : interests ] // Sends POST request to the AWS API Alamofire.request(.POST, url, parameters: parameters, encoding: .JSON).responseJSON { response in // Process Response switch response.result { case .Success: print("Sucess") case .Failure(let error): print(error) } } 

但这是行不通的,因为API没有识别数组,但是如果我创建了一个“静态”数组

 let interests = ["a", "b", "c"] 

一切都按照预期运作。

我如何解决这种情况,因为感兴趣的数组来自代码的另一部分,我应该如何声明它或构造它?

一位朋友设法在Android中使用一个完成此任务

 ArrayList 

编辑:

打印参数数组显示我:

 ["name":test, "interests": ( 103, 651, 42), "lastName": test] 

AnyObject只能表示类类型。 在Swift中,Array和Dictionary是struct,而不是许多其他语言中的类类型。 结构不能被描述为AnyObject,这就是Any进来的原因。除了类之外,Any也可以在所有其他类型中使用,包括struct和enum。

因此,每当我们输入转换数组或字典到AnyObject _TtCs21_SwiftDeferredNSArray时发生错误。所以我们必须使用Any而不是AnyObject。

  let parameters: [String: Any] = [ "name" : name, "lastName" : lastName, "interests" : interests ] 

通过使用NSJSONSerialization来编码JSON,您可以构建自己的NSURLRequest以在Alamofire中使用它,这是一个Swift 3示例:

  //creates the request var request = URLRequest(url: try! "https://api.website.com/request".asURL()) //some header examples request.httpMethod = "POST" request.setValue("Bearer ACCESS_TOKEN_HERE", forHTTPHeaderField: "Authorization") request.setValue("application/json", forHTTPHeaderField: "Accept") //parameter array let values = ["value1", "value2", "value3"] request.httpBody = try! JSONSerialization.data(withJSONObject: values) //now just use the request with Alamofire Alamofire.request(request).responseJSON { response in switch (response.result) { case .success: //success code here case .failure(let error): //failure code here } } } 

问题是你刚刚声明了数组而没有初始化它。 即使你试图插入数据,这也会使兴趣数组为零。 试着写

 var interests = [String]() 

代替

 var interests : [String] 

让ValueArray = [“userid”:name,“password”:password]

传递ValueArray [parameters:ValueArray]也validationAPI接受的编码。

事实certificate,数组中的重复ID存在问题。 API背后的代码抛出了一个exception,它没有作为错误发回。

所有其他答案都是正确的,我在找到问题后对它们进行了测试,一切正常,所以我要对它们进行投票。

非常感谢你。