Я не могу преобразовать массив объектов в формат, который можно отправить и сохранить на веб-сервере - PullRequest
1 голос
/ 17 июня 2019

Я пытаюсь отправить массив объектов на веб-сервер с помощью urlsession.Мне нужно преобразовать массив объектов в некоторый формат, который можно отправить и сохранить на сервере.

model.swift

class UserDetails 
{
    var name: String
    var phNumber: Int
    var pincode : Int
    var numberOfItems: Int

    init(name: String, number: Int, pin : Int, items: Int) {

        self.name = name
        self.phNumber = number
        self.pincode = pin
        self.numberOfItems = items
    }

}


/* viewController.swift */

    var users: [UserDetails] = []
    func sendLabDetails(userId: Int,users: [UserDetails], completion: @escaping (_ serverResponse: NSDictionary) -> Void)
        {
            let parameters = ["user_id": userId, "users": users] as [String : Any]
    }

Я думаю, что я неправильно делаю вызов APIс объектами.Пожалуйста, помогите мне с кодом того, как преобразовать массив объектов в массив словарей или любой другой поддерживаемый формат JSON.

1 Ответ

0 голосов
/ 17 июня 2019

Если у вас есть Dictionary, вы можете преобразовать его в JSON, используя JSONEncoder:

 let parameters = ["user_id": "newID", "users": "newUser"]
 do{
    let jsonParameter = try JSONEncoder().encode(parameters)
}catch{
    print(error.localizedDescription)
}

ПРИМЕЧАНИЕ: Кодирование объекта означает, что этот объект соответствует протоколу Codable. Any не соответствует этому протоколу, поэтому он не может быть закодирован как JSON. Для этого вы можете настроить свой класс UserDetails на соответствие этому протоколу или изменить структуру данных, поскольку [String:Any] нехорошо.

Пример:

class UserDetails: Codable //Be sure to make the class to conform to this protocol if needed
{
    var name: String
    var phNumber: Int
    var pincode : Int
    var numberOfItems: Int

    init(name: String, number: Int, pin : Int, items: Int) {

        self.name = name
        self.phNumber = number
        self.pincode = pin
        self.numberOfItems = items
    }

}

//Now you can encode:

var users: [UserDetails] = []

    func sendLabDetails(userId: Int,users: [UserDetails], completion: @escaping (_ serverResponse: NSDictionary) -> Void)
        {
            let parameters = ["user_id": userId, "users": users]
            do{
    let jsonParameter = try JSONEncoder().encode(parameters)
    //HERE YOU CAN USE jsonParameter to send data to server
}catch{
    print(error.localizedDescription)
}
    }

...