gpt4 book ai didi

swift - 使用多级属性在 RealmSwift 中创建 LinkingObjects 属性

转载 作者:可可西里 更新时间:2023-11-01 02:16:55 24 4
gpt4 key购买 nike

根据Realm documentation for v0.102.0 ,这就是您创建反向关系的方式:

class Person: Object {
// ... other property declarations
let dogs = List<Dog>()
}

狗 (v1)

class Dog: Object {
// ... other property declarations
let owners = LinkingObjects(fromType: Person.self, property: "dogs")
}

假设我们有另一个类,叫做 DogFood,我们想创建一个叫做 buyers 的反向关系来跟踪 Person 的哪些实例有一只 Dog 吃掉 DogFood 的实例。我们可以尝试以下方法:

狗 (v2)

class Dog: Object {
// ... other property declarations
let favoriteFoods = List<DogFood>
let owners = LinkingObjects(fromType: Person.self, property: "dogs")
}

狗粮

class DogFood: Object {
// ... other property declarations
let buyers = LinkingObjects(fromType: Person.self, property: "dogs.favoriteFoods")
}

但是,这会引发以下错误:属性“dogs.favoriteFoods”声明为链接对象属性“buyers”的起源不存在。

是否有其他方法可以达到同样的效果?

最佳答案

这可以通过过滤器来实现,但需要注意的是 DogFood我们需要查询的对象需要是 Realm 的一部分.

代码如下:

class DogFood: Object {
// ... other property declarations
var items: Results<Person> {
if let realm = self.realm {
return realm.objects(Person).filter(NSPredicate(format: "ANY dogs.favoriteFoods.id == %@", self.id))
} else {
return RealmSwift.List<Person>().filter("1 != 1")
}
}
}

属性(property)realm类型为 Realm?并通过继承自 Object 进入画面.它指向一个特定的 Realm Object实例在并返回 nil如果没有分配给一个。如果是这样,我们强制属性 items返回一组空的 Results<Person> .

关于swift - 使用多级属性在 RealmSwift 中创建 LinkingObjects 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37168662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com