Ios 领域模型中的单逆关系

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 =

我正在开发一个简单的iOS应用程序来学习Swift,我正在使用Realm。 据我所知,领域内的反向关系是通过
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中使用单个反向关系的方法是什么?

唯一的方法是312a、2b都不起作用

因为目前,
LinkingObjects
只能用于初始化LinkingObjects类型的属性。域在初始化以定义数据架构时读取类定义和所有属性。在1的代码中,
所有者
属性被视为
个人
属性

2a2b也不起作用。因为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))
    }

}