我有三个通过列表嵌套的对象,如下所示:
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
}
Run Code Online (Sandbox Code Playgroud)
获得所有线路和餐点的所有食堂都没有问题.我现在正在做的是:
let predicate = NSPredicate(format: "name == %@", selectedCanteenType.rawValue)
canteens = realm.objects(Canteen).filter(predicate)
Run Code Online (Sandbox Code Playgroud)
但现在我只需要素食主义者的饭菜.因此,我希望获得所有线路的选定食堂,但只有纯素食品.这是否可以在领域中筛选检索到的对象中的列表?
Tho*_*yne 25
Realm没有深度过滤视图的任何概念,因此您不能将相关对象中包含Results<Canteen>的Lists 限制为纯素餐.
你可以做几件类似的事情.您可以添加反关系属性,然后查询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)
Run Code Online (Sandbox Code Playgroud)
(或者更确切地说,你将能够在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
}
}
}
Run Code Online (Sandbox Code Playgroud)
遗憾的是,由于需要为每个级别的引用重复过滤器,因此存在一些重复.
| 归档时间: |
|
| 查看次数: |
24023 次 |
| 最近记录: |