我的应用目前正在使用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<String>
编辑:
打印参数数组向我显示:
["name":test, "interests": <_TtCs21_SwiftDeferredNSArray 0x7b05ac00>( 103, 651, 42), "lastName": test]
答案 0 :(得分:15)
通过使用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
}
}
}
答案 1 :(得分:3)
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
]
答案 2 :(得分:0)
让ValueArray = [&#34; userid&#34;:name,&#34; password&#34;:password]
传递ValueArray [parameters:ValueArray]也验证API接受的编码。
答案 3 :(得分:0)
结果是数组中重复的ID出现了问题。 API背后的代码抛出了一个异常,它没有作为错误发回。
所有其他答案都是正确的,我在找到问题后对它们进行了测试,一切正常,所以我将对它们进行投票。
非常感谢。