Динамическое преобразование строки в тип JSONDecoder Decodable.Protocol

У меня есть некоторые значения enum, которые я хотел бы привести к типу JSONDecoder Decodable.Protocol, который можно использовать в decode метод.

Каждое из перечислений атрибутов соответствует Codable учебный класс.

enum Attributes : String {
    case Shapes = "GetShapes"
    case Color  = "GetColors"
    case Size   = "GetSizes"
}

Вместо того чтобы иметь кучу операторов switch, я подумал, что могу динамически привести перечисление к правильному протоколу и сэкономить много кода.

Например

let results = try? JSONDecoder().decode(GetShapes.self, from: jsonData)

Заметить, что GetShapes.self, соответствует значению перечисления Атрибутов.

Поэтому я попытался с помощью NSProtocolFromString но, похоже, это не сработает.

if let protoRef = NSProtocolFromString(anAttribute.rawValue) {
    if let results = try? JSONDecoder().decode(protoRef, from: jsonData) {
        //Do something
}

Возможность приведения строки к протоколу спасла бы меня от работы.


Надеюсь, это проясняет:

В основном, возьмите строку "GetShapes", используйте немного MagicMethod(), чтобы он выплевывал

GetShapes.self который удовлетворяет параметру типа JSONDecoder().decode(type: Decodable.Protocol, from: Data)

Некоторый метод как это:

func magicMethod(_ string: String) -> Decodable.Protocol {

}

Это возможно с Swift 4?

0 ответов

Другие вопросы по тегам