如何在Swift 4.2中通过反映的类类型使用JSONDecoder解码JSON?

时间:2019-04-26 13:05:40

标签: swift reflection jsondecoder

找不到正确的方法来调用具有反映类类型的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)
    ...   
}

0 个答案:

没有答案