使用 Alamofire 和 SwiftyJSON 发布对象数组

Kei*_*ith 6 swift alamofire swifty-json swift4

我有一组字典,正在尝试在 SwiftyJSON 的帮助下发布到 Alamofire。

api 设置为:

[
    {
        "imageUrl": "someimage3.jpg"
    },
    {
        "imageUrl": "someimage4.jpg"
    }
]
Run Code Online (Sandbox Code Playgroud)

打印出来时,我的包含图像对象的数组看起来像这样,其中包含 imageUrl 键和值的图像名称。

uploadedFiles = [
    [imageUrl: "someimage.jpg"],
    [imageUrl: "someimage2.jpg"]
]
Run Code Online (Sandbox Code Playgroud)

我正在尝试将字典数组转换为正文所需的格式。我不太确定如何让它们成为 [String: AnyObject]

var body: [String: AnyObject] = [:]
let paramsJSON = JSON(uploadedFiles)
body = paramsJSON
Run Code Online (Sandbox Code Playgroud)

阿拉莫菲尔邮报

Alamofire.request("\(BASE_URL)mainimages/\(someid)", method: .post, parameters: body, encoding: JSONEncoding.default, headers: header).responseString { (response) in
        if response.result.error == nil {
            let status = response.response?.statusCode
            completion(true, status)
        } else {
            completion(false, nil)
            debugPrint(response.result.error as Any)
        }
    }
Run Code Online (Sandbox Code Playgroud)

Swe*_*per 1

该 API 似乎采用以数组作为顶层的 JSON,而不是字典,因此将数组转换为字典是不正确的。

只需传入一个数组即可!

SwiftyJSONJSON符合ExpressibleByArrayLiteral,因此您可以只使用数组文字:

let paramsJSON: JSON = [
    ["imageUrl": "someimage.jpg"],
    ["imageUrl": "someimage2.jpg"]
]
Run Code Online (Sandbox Code Playgroud)

编辑:我刚刚意识到 Alamofire 的request方法只接受[String: AnyObject]. 这意味着您需要进行自己的参数编码,如此处所示。

或者,创建您自己的,如本文URLRequest所示:

var request = URLRequest(url: someURL)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = paramsJSON.rawData()
Alamofire.request(request)
Run Code Online (Sandbox Code Playgroud)