如何将我的类对象转换为Alamofire的JSON

问题描述 投票:-2回答:2

编辑:19.02.2019我尝试了提供的解决方案。我选择了一个简单的选项,即将字典作为参数传递,并使用Alamofire的JSONEncoder将其转换为JSON对象。这是我尝试过的第一件事,但问题是感谢大家的帮助。

我想将一个类对象发布到api,但我正在努力处理类型并将其编码为JSON。

let jsonData = try JSONEncoder().encode(classObject)
let params = String(data: jsonData, encoding: .utf8)

Alamofire.request(shopSubmitURL, method: .post, parameters: params).responseString { response in
            switch(response.result) {
            case .success(_) :
                if let data = response.result.value {
                    print("Successfully submitted class object: \(response.result.value)")
                }
                break

            case .failure(_):
                print(response.result.error)
                break
            }

我的classObject设置如下:

class classObject: NSObject, Codable {
    var name : String = ""
    var items : Array = [Int]()
}

我已经尝试将对象转换为带有扩展名的字典,但是当我这样做时,我必须使用“Any”或“AnyObject”,这会导致“无法推断泛型参数”错误。

目前我得到'额外参数'方法'在呼叫'错误。

ios swift alamofire jsonencoder
2个回答
0
投票

让我们看详细:

AF.request(url: URLConvertible, method: HTTPMethod, parameters: Parameters?, encoding: ParameterEncoding, headers: HTTPHeaders?)

在Alamofire的消息来源,你可以看到public typealias Parameters = [String: Any]

这意味着你需要像使用它一样

AF.request("https://somewhere.com", method: .post, parameters: ["name":"Name", "items":[1,2,3,4]], encoding: JSONEncoding.default, headers: [/*headers if need, also Map*/])

-1
投票

正如乔希所说,这个问题已经得到了回答。但为了让你快点,我会推荐一些东西。

首先我建议你使用struct而不是类。 learn more

其次,您可能只需要一个简单的codable对象,如下所示。

struct classObject: Codable {
    let name : String
    let items : [Int]

    // CodingKeys are used to map with json keys
    enum CodingKeys: String, CodingKey {
        case name = "name"
        case items = "itemsArr"
    }

}

推荐链接CodingKeys

© www.soinside.com 2019 - 2024. All rights reserved.