Расшифруйте данные Json с помощью JsonDecoder и Alamofire - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь декодировать данные Json в мою модель. Это моя модель

struct Devices : Codable {
var id :String?
var description :String?
var status : Int?

}

 var heroes = Devices()
    print(DeviceId)
    let loginParam: [String: Any] = [
        "id": DeviceId
    ]
    let manager = Alamofire.SessionManager.default
    manager.session.configuration.timeoutIntervalForRequest = 5
    manager.request("http://13.13.13.004/website/api/Customer/DeviceControl", method: .post , parameters: loginParam, encoding: JSONEncoding.prettyPrinted)
        .responseData { response in
            let json = response.data

            do{
                let decoder = JSONDecoder()
                //using the array to put values
                heroes = try decoder.decode(Devices.self, from: json!)

            }catch let err{
                print(err)
            }

этот код не попадает в блок catch. Но ценности героев возвращают ноль. Когда я пытаюсь использовать NsDictionary Это дает результат.

1 Ответ

0 голосов
/ 31 августа 2018

Это распространенная ошибка: вы забыли корневой объект

struct Root : Decodable {

    private enum  CodingKeys: String, CodingKey { case resultCount, devices = "results" }

    let resultCount : Int
    let devices : [Device]
}

И назовите структуру устройства в единственном числе (devices - это массив Device экземпляров) и объявите элементы как необязательные

struct Device : Decodable {
    var id : String
    var description : String
    var status : Int
}

...

var heroes = [Device]()

...

let result = try decoder.decode(Root.self, from: json!)
heroes = result.devices
...