2016-08-17 72 views
2

我正尝试在POST API中发送字典。为此我使用Alamofire。如何使用Alamofire Swift中的数组发送字典

参数字典如下:

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": [email protected], "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”写在那里对我来说完全不清楚。

由于我得到空白的回应。

请帮帮我。

+0

你解决了这个问题吗? –

+1

@AnandPrem是的我已经解决了这个问题,通过升级Alamofire版本为SWIFT 3.0 – Sunita

回答

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 

注意它仅仅是方法的编码参数改变

+0

嗨..我也尝试过使用.JSON。但API预计.URL编码。 – Sunita

0

AnyObject只能表示类的类型。在Swift中,Array和Dictionary是结构体,而不是许多其他语言中的类类型。该结构不能被描述为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) 
+0

谢谢Aseem ....我已经试过这个解决方案,但正如我所说我使用Alamofire来进行网络调用,所以Alamofire只接受Dictionary 中的参数。没有办法通过字典通过参数。有没有其他办法可以解决这个问题? – Sunita

相关问题