Ios 领域模型中的单逆关系
我正在开发一个简单的iOS应用程序来学习Swift,我正在使用Realm。 据我所知,领域内的反向关系是通过Ios 领域模型中的单逆关系,ios,swift,lazy-loading,realm,Ios,Swift,Lazy Loading,Realm,我正在开发一个简单的iOS应用程序来学习Swift,我正在使用Realm。 据我所知,领域内的反向关系是通过LinkingObjects属性实现的,该属性是一个包含所有链接到该属性的对象的集合 请参考领域文档中的示例: class Person: Object { // ... other property declarations let dogs = List<Dog>() } class Dog: Object { dynamic var name =
LinkingObjects
属性实现的,该属性是一个包含所有链接到该属性的对象的集合
请参考领域文档中的示例:
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")
}
2a:
2b:
3:
我不认为“解决方案1”是延迟加载的,就像在“解决方案2”中一样,owner
不会“自动更新”,但是这应该不是问题,因为在我的情况下,狗
永远不会改变所有者
您建议在Swift中使用单个反向关系的方法是什么?唯一的方法是3。1和2a、2b都不起作用 因为目前,
LinkingObjects
只能用于初始化LinkingObjects类型的属性。域在初始化以定义数据架构时读取类定义和所有属性。在1的代码中,所有者
属性被视为个人
属性
2a和2b也不起作用。因为Realm不支持lazy
属性。同样2b以与1相同的错误方式使用链接对象
因此,只有3按预期工作
另见 也许您可以在“一侧”设置实际关系
- 在“一侧”指定连接
- 在“多”端的getter中执行查询:
所以应该这样读:
class Dog: Object {
dynamic var name:String = ""
dynamic var owner:Owner? = nil
}
class Ownder: Object {
dynamic var name:String = ""
var dogs:Results<Dog>? {
return realm?.objects(Dog).filter(NSPredicate(format: "owner == %@", self))
}
}
类狗:对象{
动态变量名称:String=“”
动态变量所有者:所有者?=nil
}
类所有者:对象{
动态变量名称:String=“”
结果如何{
返回域?.objects(Dog).filter(NSPredicate(格式:“owner==%@”,self))
}
}
class Dog: Object {
private let owners = LinkingObjects(fromType: Person.self, property: "dogs")
lazy var owner: Person = {return self.owners.first!}()
}
class Dog: Object {
lazy var owner: Person = {
return LinkingObjects(fromType: Person.self, property: "dogs").first!
}()
}
class Dog: Object {
private let owners = LinkingObjects(fromType: Person.self, property: "dogs")
var owner: Person {
return self.owners.first!
}
}
class Dog: Object {
dynamic var name:String = ""
dynamic var owner:Owner? = nil
}
class Ownder: Object {
dynamic var name:String = ""
var dogs:Results<Dog>? {
return realm?.objects(Dog).filter(NSPredicate(format: "owner == %@", self))
}
}