我有一些枚举值,我想转换为 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 有可能吗?