Alamofire:创建字典数组

Posted

技术标签:

【中文标题】Alamofire:创建字典数组【英文标题】:Alamofire: Create array of dictionaries 【发布时间】:2015-11-19 14:19:35 【问题描述】:

需要发送到服务器的JSON是这样的:

[
    
        "value": "0",
        "optionId": "de07a0ae-9b85-4f2a-bd8f-28f0ccb55f81"
    ,
    
        "value": "1",
        "optionId": "abe075ef-d76e-45e0-ace9-e73218604b87"
    ,
    
        "value": "0",
        "optionId": "820124a6-a6ed-499e-8d0d-7ac04160f56d"
    ,
    
        "value": "0",
        "optionId": "0d8cb27a-2659-4e54-a4f0-0b0a10131da5"
    
]

所以我创建了一个字典数组:

var parameters = [[String:NSObject]]()

但 Alamofire 只接受字典。有没有办法自己进行 JSON 编码并将其作为参数传递给 Alamofire?或者你会怎么解决?

无法将 '[[String : NSObject]]' 类型的值转换为预期值 参数类型 '[String : AnyObject]?'

【问题讨论】:

【参考方案1】:

您应该能够通过将数组序列化为 json 来像这样发送它。

var parameters = [[String:AnyObject]]()
if let url = NSURL(string:urlString)
    let request = NSMutableURLRequest(URL: url)

            request.setValue("application/json", forHTTPHeaderField: "Content-Type")
            request.HTTPMethod = "POST"

            request.HTTPBody = try! NSJSONSerialization.dataWithJSONObject(parameters, options: [])

            Alamofire.request(request)
                .responseJSON  response in
                    switch response.result 
                    case .Success(let responseObject):
                        print(responseObject)
                    case .Failure(let error):
                        print(error)
                    
            

【讨论】:

使用 Alamofire 4.x,NSMutableURLRequest 无法转换为 URLRequestConvertible。根据文档github.com/Alamofire/Alamofire#urlrequestconvertible,“request”变量应该是 URLRequest 类型。有了这个小小的改动,这个解决方案就很有效。

以上是关于Alamofire:创建字典数组的主要内容,如果未能解决你的问题,请参考以下文章

使用 alamofire 发布带有字典和字典数组的 JSON 对象

Alamofire:发送带有字典数组的 JSON

Alamofire 多参数字典

iOS 中的 Alamofire 正在接收字典而不是数组

无法在 Alamofire 多格式数据请求中发送字典数组

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