查询领域获取列表中具有特定对象的对象
Query Realm get object which have particularly object in a list
我认为这是一个简单的解决方案,但我坚持使用最佳方法。
我的领域数据库由对象 POI 和 CATEGORY 组成。其中 POI 可以有一个或多个 CATEGORY
的对象
class POI: Object {
dynamic var id:String = ""
dynamic var name:String = ""
dynamic var visited:Bool = false;
let categories = List<CATEGORY>()
override static func primaryKey() -> String?
{
return "id";
}
}
稍后我需要显示具有特定 CATEGORY 的 POI 的数量,以及 POI 的数量 具有给定的 CATEGORY 且访问的布尔值为真。
像这样:
func getAllVisitedPointsWithCategory(idCategory:String) -> Results<POI> {
}
func getAllPointsWithCategory(idCategory:String) -> Results<POI>{
}
有什么建议吗?
这应该有效:
func getAllVisitedPointsWithCategory(idCategory:String) -> [POI] {
let containingPOI = getAllPointsWithCategory(idCategory)
return containingPOI.filter({ (poi) -> Bool in
return poi.visited
})
}
func getAllPointsWithCategory(idCategory:String) -> [POI] {
let realm = try! Realm()
let containingPOI = realm.objects(POI).filter({ (poi) -> Bool in
return poi.categories.contains({ (cat) -> Bool in
return idCategory == cat.id
})
})
return containingPOI
}
基本上只是查询数据和过滤结果。
这可以通过使用 Realm 的查询引擎而不是在 Swift 中单独过滤对象来更简洁、更快地完成:
func getAllVisitedPointsWithCategory(idCategory:String) -> Results<POI> {
return getAllPointsWithCategory(idCategory).filter("visited = true")
}
func getAllPointsWithCategory(idCategory:String) -> Results<POI>{
let realm = try! Realm()
return realm.objects(POI.self).filter("ANY categories.id = %@", idCategory)
}
我认为这是一个简单的解决方案,但我坚持使用最佳方法。
我的领域数据库由对象 POI 和 CATEGORY 组成。其中 POI 可以有一个或多个 CATEGORY
的对象class POI: Object {
dynamic var id:String = ""
dynamic var name:String = ""
dynamic var visited:Bool = false;
let categories = List<CATEGORY>()
override static func primaryKey() -> String?
{
return "id";
}
}
稍后我需要显示具有特定 CATEGORY 的 POI 的数量,以及 POI 的数量 具有给定的 CATEGORY 且访问的布尔值为真。
像这样:
func getAllVisitedPointsWithCategory(idCategory:String) -> Results<POI> {
}
func getAllPointsWithCategory(idCategory:String) -> Results<POI>{
}
有什么建议吗?
这应该有效:
func getAllVisitedPointsWithCategory(idCategory:String) -> [POI] {
let containingPOI = getAllPointsWithCategory(idCategory)
return containingPOI.filter({ (poi) -> Bool in
return poi.visited
})
}
func getAllPointsWithCategory(idCategory:String) -> [POI] {
let realm = try! Realm()
let containingPOI = realm.objects(POI).filter({ (poi) -> Bool in
return poi.categories.contains({ (cat) -> Bool in
return idCategory == cat.id
})
})
return containingPOI
}
基本上只是查询数据和过滤结果。
这可以通过使用 Realm 的查询引擎而不是在 Swift 中单独过滤对象来更简洁、更快地完成:
func getAllVisitedPointsWithCategory(idCategory:String) -> Results<POI> {
return getAllPointsWithCategory(idCategory).filter("visited = true")
}
func getAllPointsWithCategory(idCategory:String) -> Results<POI>{
let realm = try! Realm()
return realm.objects(POI.self).filter("ANY categories.id = %@", idCategory)
}