领域 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()
beginGroup
和 endGroup
的意思只是“括号”,这样您就可以在查询中对 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 是新文档。
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()
beginGroup
和 endGroup
的意思只是“括号”,这样您就可以在查询中对 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 是新文档。