Alamofire Post 带有嵌套 JSON 参数的请求

Alamofire Post Request with nested JSON parameters

我的 Alamofire post 请求如下所示:

Alamofire.request("http://...", method: HTTPMethod.post, parameters: parameters, encoding: JSONEncoding.default, headers: nil)
         .responseJSON(completionHandler: {(response) in ... })

如果我的参数很简单,一切正常:

let parameters: Parameters = [
    "firstName": "John",
    "lastName": "Doe"
]

如果我的参数包含 json 对象,我 运行 就会遇到问题。

let address: JSON = [
    "street": "1234 Fake St",
    "city": "Seattle",
    "state": "WA"
]

let parameters: Parameters = [
    "firstName": "John",
    "lastName": "Doe",
    "address": address
]

Alamofire 请求未执行,我的应用程序崩溃。

我认为这里的问题是 Alamofire 正在尝试将参数编码为 json,而该参数已经是 json 对象。本质上,双重编码会导致应用程序崩溃。

我找到的解决方案是在使用 SwiftyJSON 的 .rawValue.

执行请求之前解码 json 参数
let parameters: Parameters = [
    "firstName": "John",
    "lastName": "Doe",
    "address": address.rawValue
]

https://github.com/SwiftyJSON/SwiftyJSON#raw-object

对于那些不使用 SwiftyJSON 的人,Parameters 类型也接受 Parameters 类型,如下所示:

let address: Parameters = [
    "street": "1234 Fake St",
    "city": "Seattle",
    "state": "WA"
]

let parameters: Parameters = [
    "firstName": "John",
    "lastName": "Doe",
    "address": address
]