我正在尝试在POST API中发送Dictionary。为此我正在使用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]
向服务器发送请求如下:
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> else{return}
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]
与键对应的值&#34; listing_ids []&#34;是一个Int数组。这引起了问题。
Something&#34; _TtCs21_SwiftDeferredNSArray&#34;在那里写的,我完全不清楚。
由于这一点,我得到了空白回复。
请帮帮我。
答案 0 :(得分: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
注意它只是方法改变的编码参数
答案 1 :(得分:0)
AnyObject只能表示类类型。在Swift中,Array和Dictionary是struct,而不是许多其他语言中的类类型。结构不能被描述为AnyObject,这就是Any进来的原因。除了类之外,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)