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})
}
}
}
...そして、実装を含むプロトコルを私が持っているすべての列挙に適用します。
明らかに参照がself.Type
そこで機能していません。最終的に関数を使用する特定のインスタンスのタイプを一般的に参照する方法がわかりませんか? おそらく私はその問題を解決する間違った方法を考えています。