查询领域获取列表中具有特定对象的对象

Query Realm get object which have particularly object in a list

我认为这是一个简单的解决方案,但我坚持使用最佳方法。

我的领域数据库由对象 POICATEGORY 组成。其中 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";
  }
}

稍后我需要显示具有特定 CATEGORYPOI 的数量,以及 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)
}