领域 swift beginGroup/endGroup 等效

Realm swift beginGroup/endGroup equivalent

swift 中 beginGroup/endGroup (kotlin) 的等价物是什么?我需要在 swift 中重建下面的查询。我已阅读 documentation,但我无法重新创建此类查询。

fragment.realm.where(Item::class.java)
  .`in`("type", Item.Type.values().map { it.name }.toTypedArray()) 
  .apply {
      isEmpty("section")
      or()
      beginGroup()
      // Do something
      endGroup()
  }
  .sort("sortScore", Sort.DESCENDING)
  .findAll()

beginGroupendGroup 的意思只是“括号”,这样您就可以在查询中对 sub-expressions 进行分组。在 Realm Swift 中,您可以在 10.19 版本之后使用 Swift 语法编写查询(因为 Query 结构支持动态成员查找和运算符重载),或者使用 NSPredicate句法。这两种语法都支持直接使用括号对表达式进行分组,所以你可以这样写:

// version 10.19+
let items = realm.objects(Item.self).where { item in
    item.type.in(ItemType.allCases.map(\.rawValue)) &&
    item.section == "" ||
    ( // this parenthesis is what beginGroup translates to
        /* do something */
    ) // this parenthesis is what endGroup translates to
}.sorted(by: \.sortScore, ascending: false)

也就是说,据我所知,这对括号是不必要的。不管怎样,你放在“做某事”中的任何内容都将具有与 || 更高或相同的优先级,因此无论你是否放置括号,谓词都会有相同的结果。

旁注:您找到的文档是 Realm Swift 的旧版本。 This 是新文档。