Динамическое преобразование строки в тип JSONDecoder Decodable.Protocol - PullRequest
0 голосов
/ 10 октября 2018

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

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

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

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

Например,

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

Обратите внимание, что GetShapes.self соответствует значению Attributes enum.

Поэтому я попытался использовать NSProtocolFromString, но это не похоже насделай трюк.

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

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


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

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

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

Некоторый метод, подобный этому:

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

}

Возможно ли этосо Swift 4?

...