如何在 Alamofire Swift 中发送带有数组的字典
Posted
技术标签:
【中文标题】如何在 Alamofire Swift 中发送带有数组的字典【英文标题】:How to send dictionary with array in Alamofire Swift 【发布时间】:2016-08-17 11:00:48 【问题描述】:我正在尝试在 POST API 中发送字典。为此,我正在使用 Alamofire。
参数字典如下:
var param: Dictionary<String, AnyObject> =
[
"name" : name,
"email" : email,
"mobile_number" : mobile_number,
"body" : body
] as Dictionary<String, AnyObject>
param["listing_ids[]"] = [772121,772136,772129]
向Server发送请求如下:
Alamofire.request(.POST,baseUrl+enquiryEndPoint , parameters: params , encoding: .URL, headers: createHeader()).responseJSON response in
switch response.result
case .Success:
guard let response = response.result.value as? Dictionary<String, AnyObject> elsereturn
completionBlock(response,error: nil)
case .Failure(let error):
completionBlock([:],error: error)
打印参数字典时,报错如下:
["mobile_number": 457823356, "email": s@gmail.com, "body": Hello, I found your property on <country-website>. Please send me additional information about this property.
Thank you, "listing_ids[]": <_TtCs21_SwiftDeferredNSArray 0x1400d6ff0>(
708783,
589915,
722173,
746261,
618410
)
, "name": s]
键“listing_ids[]”对应的值是一个Int数组。这在这里引起了问题。
那里写着“_TtCs21_SwiftDeferredNSArray”的东西,我完全不清楚。
因此我收到空白回复。
请帮帮我。
【问题讨论】:
您解决了这个问题吗? @AnandPrem 是的,我已经通过升级 swift 3.0 的 Alamofire 版本解决了这个问题 【参考方案1】:正如post 中提到的,您可以尝试更改请求的编码
Alamofire.request(.POST,baseUrl+enquiryEndPoint , parameters: params , encoding: .URL, headers: createHeader()).responseJSON response in
到
Alamofire.request(.POST,baseUrl+enquiryEndPoint , parameters: params , encoding: .JSON, headers: createHeader()).responseJSON response in
注意只是方法的编码参数改变了
【讨论】:
嗨..我也试过.JSON。但 API 应为 .URL 编码。【参考方案2】:AnyObject 只能表示类类型。在 Swift 中,Array 和 Dictionary 是 struct,而不是许多其他语言中的类类型。 struct 不能用 AnyObject 来描述,这就是 Any 出现的原因。除了 class,Any 还可以用于所有其他类型,包括 struct 和 enum。
因此,您必须将字典更改为字典。下面的代码工作正常,可以根据您的要求打印字典。
var param: Dictionary<String, Any> = [
"name" : "name",
"email" : "email",
"mobile_number" : 123132,
"body" : "Hello"
]
param["listing_ids[]"] = [772121,772136,772129]
print(param)
【讨论】:
谢谢 Aseem.... 我已经尝试过这个解决方案,但正如我所说,我正在使用 Alamofire 进行网络调用,所以 Alamofire 只接受 Dictionary以上是关于如何在 Alamofire Swift 中发送带有数组的字典的主要内容,如果未能解决你的问题,请参考以下文章
使用 swift 在 Alamofire 中发送带有对象数组的 JSON 作为参数
带有 XML 响应和正文的 SOAP 请求 swift 3,Alamofire
如何在 Alamofire 4.0 中仅使用参数和正文在 swift 中使用 POST 方法发送请求?