Stackoverflowers 様
ObjectMapper の使用に支障があるので、本題に入ります。
モデルを一時レコードとして SQLite テーブルに JSON 形式で保存しています。各モデルには、マップ先のモデル タイプを一意に識別する Type フィールドがあります。
たとえば、Animal プロトコルに準拠するモデル Dog、Cat、Mouse がある場合、同等の AnimalType (DogType、CatType、MouseType) 列挙型があり、これは各モデルのフィールドでもあります。データベースに保存された後、データベースから読み込まれた JSON を Model クラスの実際のインスタンスにマッピングするエレガントな方法を見つけるのに苦労しています。
私が現在行っているのは、NSJSONSerialization を介して JSON を JSON ディクショナリに変換し、そのディクショナリにタイプのクエリを実行することです。タイプが見つかったら、すべてのタイプを切り替えて、関連する Mapper オブジェクトをインスタンス化し、オブジェクトのデシリアライズを試みます。これは強引なアプローチだと感じており、この問題にアプローチするより良い方法があるのではないかと考えていました。
結論:
モデル: 犬、猫、マウス (Animal に準拠、AnimalType 要件あり)
Enums : AnimalType (DogType、CatType、MouseType)
問題:各タイプを手動で検査して正しいマッパーをインスタンス化する以外に、ロードされた JSON をインスタンスに逆シリアル化するために Mapper オブジェクトを特定して正しくインスタンス化する方法。
enum AnimalType {
case Dog
case Cat
case Mouse
}
protocol Animal {
var animalType: AnimalType { get }
}
struct Dog: Animal {
var animalType = AnimalType.Dog
}
struct Cat: Animal {
var animalType = AnimalType.Cat
}
struct Mouse: Animal {
var animalType = AnimalType.Mouse
}