我需要从 REST API 获取一些对象并使用 ObjectMapper 将它们映射到本地对象。
这些对象包含许多枚举。它们都以整数形式出现,我想将它们映射到本地描述的枚举。
为此,我必须描述 ObjectMapper 使用的标准转换函数。
enum Types: Int {
case Uno = 1
case Dos = 2
case Tres = 3
static var transform = TransformOf<Types,Int>(
fromJSON: {
$0 != nil
? Types(rawValue:$0!)
: nil
},
toJSON: { $0?.rawValue})
}
问题是我有许多这样的枚举,并且函数在所有枚举中都是完全相同的,除了TransformOf<..>
列表中的第一个参数是特定于每个枚举的。
我想要做的是创建一个具有该功能的默认实现的通用协议,例如
protocol Transformable {
var transform: TransformOf<self.Type,Int> {
get {
return TransformOf<self.Type,Int>(
fromJSON: {
$0 != nil
? Types(rawValue:$0!)
: nil
},
toJSON: { $0?.rawValue})
}
}
}
...然后将具有实现的协议应用于我拥有的所有枚举。
显然 reference ofself.Type
在那里不起作用,我只是不知道如何一般地引用最终将使用该函数的特定实例的类型?可能我在想解决这个问题的错误方法。