Decodable. Обьект не конвертируется из JSON

swift4

#1

Не понимаю по каким причинам PostDeviceUidResponseData.data после конвертации у меня nil

class Params : Decodable {
    
    var param_id: Int?
    var name: String?
    var value: String?
    var description: String?
    var type: String?
    
    private enum CodingsKey: String, CodingKey {
        case param_id        = "param_id"
        case name            = "name"
        case value           = "value"
        case description     = "description"
        case type            = "type"
    }
}

class BaseResponseData: Decodable {
    var action: String?
    var message: String?
    var result: Int?
    var params: [Params]?
    
    // Проверяем есть, ли информация
    func getFirstParams() -> Params? {
        if let vals = params {
            for param in vals {
                return param
            }
        }
        return nil
    }
}

class PostDeviceUidResponseData : BaseResponseData {
    var data: Data?
    struct Data : Decodable {
        var uid: String
    }

}

В тоже время если модель выглядит так, то все ок

struct PostDeviceUidResponseData : Decodable {
    var data: Data?
    var action: String?
    var message: String?
    var result: Int?
    var params: [Params]?
    
    struct Data : Decodable {
        var uid: String
    }
    
    // Проверяем есть, ли информация
    func getFirstParams() -> Params? {
        if let vals = params {
            for param in vals {
                return param
            }
        }
        return nil
    }
}

Код конвертации

let message = "{\"result\":0,\"message\":\"\",\"action\":\"getUid\",\"data\":{\"uid\":\"e693ee05705d6bc21e061dd2eb617d2869fbb64d\"},\"params\":null,\"identity\":\"693f75628c881718fd20\"}"

if let jsonData = message.data(using: .utf8) {
let token = try JSONDecoder().decode(PostDeviceUidResponseData.self, from: jsonData)
dump(token)
}

Кто-то может обьяснить что не я не понимаю?


#2
let message = """
{
    "result": 0,
    "message": "",
    "action": "getUid",
    "data": {
        "uid": "e693ee05705d6bc21e061dd2eb617d2869fbb64d"
    },
    "params": [
        {
            "param_id": 1,
            "name": "A",
            "value": "B"
        },
        {
            "param_id": 2,
            "name": "C",
            "value": "D"
        }
    ],
    "identity": "693f75628c881718fd20"
}
"""

class Params: Decodable {
    var paramId: Int?
    var name: String?
    var value: String?
    var description: String?
    var type: String?
}

struct PostDeviceUidResponseData: Decodable {
    struct Data : Decodable {
        var uid: String
    }
    var data: Data?
    var action: String?
    var message: String?
    var result: Int?
    var params: [Params]?
    
}
let decoder = JSONDecoder()
decoder.keyDecodingStrategy = .convertFromSnakeCase
let token = try decoder.decode(PostDeviceUidResponseData.self, from: message.data(using: .utf8)!)
print(token)


#3

Вы читали вообще сообщение?


#4

А Вы?
У меня не nil, или у вас ещё какая то конвертация?

P.S. Из за простыни не понятно, остальное нужно конвертировать или нет.


#5

у меня тоже не nil, если я не использую класс с наследованием от BaseResponseData. Вот и вопрос, почему при использовании класса с наследованием nil, а если структуру то все ок. я надеюсь я смог обьяснить суть.


#6

#7

Так и надо спрашивать)


#8

Спасибо. Ушел читать