Динамическое преобразование строки в тип 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?