如何在Alamofire Swift中发送带数组的字典

时间:2016-08-17 11:00:49

标签: ios swift alamofire

我正在尝试在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;在那里写的,我完全不清楚。

由于这一点,我得到了空白回复。

请帮帮我。

2 个答案:

答案 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)