Как декодировать JSON с JSONDecoder по отраженному типу класса в Swift 4.2? - PullRequest
1 голос
/ 26 апреля 2019

Не удается найти правильный способ вызова decode метода с отраженным типом класса.Получена ambiguous reference ошибка на нем.

class EntityTwo: Decodable {
    var name: String = ""
}

class EntityOne: Decodable {
    var value: String = ""
}

struct Entity: Decodable {

    var entity: String
    var payload: Any

    enum CodingKeys: String, CodingKey {
        case entity
        case payload
    }

    init(from decoder: Decoder) throws {

        let container = try decoder.container(keyedBy: CodingKeys.self)

        entity = try container.decode(String.self, forKey: .entity)
        let entityType = NSClassFromString("MyFramework." + entity) as! Decodable.Type

        payload = try container.decode(entityType, forKey: .payload)
    }
}

Получена проблема в:

payload = try container.decode(entityType, forKey: .payload) -> Ambiguous reference to member 'decode(_:forKey:)'

В фоновом режиме она использовалась для получения различных сущностей из сокета:

{
    "entity": "EntityOne",
    "payload": {
        "value": "EntityOneValue"
    }
}

{
    "entity": "EntityTwo",
    "payload": {
        "name": "EntityTwoName"
    }
}

public func websocketMessage(data: Data) {

    let entity = JSONDecoder().decode(Entity.self, from: data)
    ...   
}
...