swift - 将字符串动态转换为 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 有可能吗?
解决方案
推荐阅读
- php - 以选择形式显示所有房间
- html - 如何更改 HTML URL /folder/file.html
- c# - 将数据集值转换为按特定行值分组的列表
- wifi - 在 802.11 物理层中开始传输
- java - Java NIO2 ClientServer,如何将服务器暴露在本地机器之外?
- python - 我无法用 django 发送电子邮件
- html - How to implement keyboard input in WebGL?
- vue.js - 在元素 ui 表中添加硬编码行
- mysql - MySQL创建没有选择数据库的临时表
- kotlin - Kotlin:使用 startActivityForResult 与同伴一起启动活动