Почему декодируется JSON NIL с использованием Codable? - PullRequest
0 голосов
/ 17 декабря 2018

Я использую последнюю версию Swift с Xcode 10.1.Я умею кодировать json из объекта в порядке, но при декодировании строки json обратно в объект получается ноль.

Это из учебного пособия по хакерскому полудню, а исходный учебник также печатает ноль.

Вот пример объекта:

class Car: NSObject, Codable {
    var name: String = ""
    var companyURL: URL? = nil
    var yearOfManufacture: Int = 0
    var isNew:Bool = true
    var otherDetailsData: [String:String]? = nil
    var carType: CarType = .Unknown
    var carSize: CarSize = CarSize(height: 0, length: 0)
}
struct CarSize: Codable {
    var height: Double
    var length: Double
}

enum CarType: String, Codable {
    case Unknown
    case SUV
    case Sedan
}

//here is sample json
        let jsonString = """
                        {
                            "name":"City ZX",
                            "isNew":true,
                            "yearOfManufacture":2018,
                            "companyURL":"www.honda.com",
                            "carType":"Sedan",
                            "carSize":{
                                       "height":200,
                                       "height":100
                                   },
                            "otherDetailsData":{
                                       "color":"Red",
                                       "fuelType":"Petrol"
                                   },
                        }
                        """
//here is where i attempt to create the object from the json string:
        if let jsonData = jsonString.data(using: .utf8)
        {
            //And here you get the Car object back
            let carTest = try? JSONDecoder().decode(Car.self, from: jsonData)
            print("carObject currently printing nil ", carTest)
        }

1 Ответ

0 голосов
/ 17 декабря 2018

Ваша структура CarSize имеет свойства height и length, но в вашем jsonString вы объявили просто height дважды, поэтому вы забыли length, что также необходимо для декодирования.

Вы, вероятно, хотели бы использовать length вместо секунды height в своем jsonString

"carSize":{                             
    "height":200,
    "length":100
}

или (если ваша машина не небоскреб)

"carSize":{                             
    "height":100,
    "length":200
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...