gpt4 book ai didi

关系列表中的 iOS Realm Filter 对象

转载 作者:IT王子 更新时间:2023-10-29 05:21:02 28 4
gpt4 key购买 nike

我通过这样的列表嵌套了三个对象:

class Canteen: Object {

dynamic var name: String?
let lines = List<Line>()
}

class Line: Object {

dynamic var name: String?
let meals = List<Meal>()
}

class Meal: Object {

dynamic var name: String?
dynamic var vegan: Bool = false
}

搞定所有食堂所有的线路和饭菜是没有问题的。我现在正在做的是:

let predicate = NSPredicate(format: "name == %@", selectedCanteenType.rawValue)
canteens = realm.objects(Canteen).filter(predicate)

但现在我只需要素食。所以我希望获得所有线路的选定食堂,但仅限于纯素餐点。这在现实中是否可能过滤检索到的对象中的列表?

最佳答案

Realm 没有任何深度过滤 View 的概念,所以你不能有 Results<Canteen>这限制了 List s 包含在与素食相关的元素中。

您可以执行几项类似的操作。您可以添加反向关系属性,然后查询 Meal对象代替:

class Canteen: Object {
dynamic var name: String?
let lines = List<Line>()
}

class Line: Object {
dynamic var name: String?
let meals = List<Meal>()
let canteens = LinkingObjects(fromType: Canteen.self, property: "lines")
}

class Meal: Object {
dynamic var name: String?
dynamic var vegan: Bool = false
let lines = LinkingObjects(fromType: Line.self, property: "meals")
}

let meals = realm.objects(Meal).filter("vegan = true AND ANY lines.canteens.name = %@", selectedCanteenType.rawValue)

(或者更确切地说,一旦 Realm 0.102.1 发布,您就可以使用;目前它会崩溃)。

如果您只需要遍历膳食但需要从食堂开始这样做,您可以这样做:

let canteens = realm.objects(Canteen).filter("name = %@ AND ANY lines.meals.vegan = true", selectedCanteenType.rawValue)
for canteen in canteens {
for line in canteen.lines.filter("ANY meals.vegan = true") {
for meal in line.meals.filter("vegan = true") {
// do something with your vegan meal
}
}
}

不幸的是,由于需要为每个级别的引用重复过滤器,因此有一些重复。

关于关系列表中的 iOS Realm Filter 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37193959/

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