在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,它没有作为错误发回。
所有其他答案都是正确的,我在找到问题后对它们进行了测试,一切正常,所以我要对它们进行投票。
非常感谢你。
- 触摸事件由多个视图处理
- 如何在UIBarbutton中将UIAlertcontroller实现为PopOver(箭头方向向上)
- JSQMessagesViewController – 发送带有附加图像文件的文本消息
- 西迪亚越狱
- 在iOS 7中获取联系人
- Swift 2 – 调用`didDeselectItemAtIndexPath`时发生致命错误
- NSDate格式化问题与Twitter的JSON API
- Android,Windows Phone和iOS可以使用的内部和外部数据库是什么?
- 核心数据获取请求失败:'NSInternalInconsistencyException',原因:'语句仍然处于活动状态'