7. class Person : Object, Decodable {
dynamic var name: String = ""
dynamic var group: Group?
static func decode(e: Extractor) -> Person? {
return build(
e <| "name"
).map(Person.init)
}
init(_name: String) {
name = _name
super.init()
}
// Realm対応のために必要(Objectを継承しているので)
required init() {
super.init()
}
override init(realm: RLMRealm, schema: RLMObjectSchema) {
super.init(realm: realm, schema: schema)
}
}
Person
8. class Group : Object, Decodable {
dynamic var name : String = ""
let persons = List<Person>() // ArrayじゃなくてList
static func decode(e: Extractor) -> Group? {
return build(
e <| "name",
e <|| "persons"
).map(Group.init)
}
init(_name: String, _persons: [Person]) {
name = _name
super.init()
// ここで関連付け
for person in _persons {
person.group = self
persons.append(person)
}
}
∼略∼
}
Group
9. guard let realm = try? Realm() else {
return
}
realm.write({ () -> Void in
if let group : Group = decode(json) {
realm.add(group)
}
})
let result = realm.objects(Person)
print(result.description)
実行
簡単!