プロジェクトを Swift 4 に移行した後、Decodable を使用してオブジェクトのシリアル化を JSON から Realm Object に移行し始めました。私のオブジェクトには、私のメソッドでも初期化されるリストがありますinit(from decoder: Decoder)
。コード内:
class MyObj: RealmSwift.Object, Decodable {
dynamic var id: String
let fooList = List<Foo>()
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
id = try container.decode(String.self, forKey: .id)
try? container.decode([Foo].self, forKey: .id)
.forEach(fooList.append)
}
override class func primaryKey() -> String? { return "id" }
}
シリアル化後にオブジェクトを検査すると、すべて問題ありません。すべてのデータが正しくシリアライズされています。その後、ネットワーク層で、新しくシリアル化されたオブジェクトがレルムに永続化されます。
realm.beginWrite()
realm.add(myObjInstance, update: true)
try! realm.commitWrite()
レルムからオブジェクトを再取得すると:
realm.object(ofType: MyObj.self, forPrimaryKey: id)
結果は MyObj インスタンスになりますが、fooList は空です。
明らかに私は何か間違ったことをしていますが、何ですか?:D