Я разрабатываю простое приложение для iOS, чтобы изучить Swift, и я использую Realm. Насколько я знаю, в Realm обратные отношения достигаются с помощью свойства LinkingObjects
, которое представляет собой коллекцию, содержащую все объекты, связанные с этим.Единственная обратная связь в моделях Realm
Рассмотрим пример из области Документация:
class Person: Object {
// ... other property declarations
let dogs = List<Dog>()
}
class Dog: Object {
dynamic var name = ""
dynamic var age = 0
let owners = LinkingObjects(fromType: Person.self, property: "dogs")
}
В моей модели, я знаю, что каждый Dog
экземпляр будет иметь только один владельца, так как каждой собаки, при создании добавляется только один Person
List
.
Теперь я хотел бы иметь owner: Person
свойства в классе Dog
, что ссылки на его единственный владелец, чтобы сделать код более понятными и простым (вместо того, чтобы писать dog.owners.first
каждый раз), сохраняя при этом ленивой загрузки поведение (они лениво загружены, правда?). Я не знаю, как дорого стоит запрос «Связывание объектов», но так как вокруг будет много «Собак», я думаю, что было бы лучше не обращаться к ним при инициализации объекта.
Сейчас эти решения я мог думать:
1:
class Dog: Object {
let owner: Person = LinkingObjects(fromType: Person.self, property: "dogs").first!
}
2a:
class Dog: Object {
private let owners = LinkingObjects(fromType: Person.self, property: "dogs")
lazy var owner: Person = {return self.owners.first!}()
}
2b:
class Dog: Object {
lazy var owner: Person = {
return LinkingObjects(fromType: Person.self, property: "dogs").first!
}()
}
3:
class Dog: Object {
private let owners = LinkingObjects(fromType: Person.self, property: "dogs")
var owner: Person {
return self.owners.first!
}
}
Я не думаю, что «решение » лениво загрузится и, как и в «решении », то owner
не будет «автоматическое обновление», однако это не должно быть проблема, поскольку в моем случае Dog
не изменит владельца.
Что вы рекомендуете: Обратная связь в Swift?