首页 > 解决方案 > 将字符串动态转换为 JSONDecoder Decodable.Protocol 类型

问题描述

我有一些枚举值,我想转换为 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, 对应于Attributes枚举的值。

所以我尝试使用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 有可能吗?

标签: swiftcodablejsondecoder

解决方案


推荐阅读