Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ /

筛选数据 — SwiftUI

在此页面上

  • 在 SwiftUI 视图中观察
  • 搜索 Realm 集合
  • 使用 ObservedResults 过滤或查询 Realm
  • 使用 NSPredicate 进行过滤
  • 使用 Realm 类型安全 Query API 进行查询
  • 部分筛选结果

本页示例中使用的 @ObservedResults 属性包装器用于“SwiftUI 视图”。如果您想在视图模型中观察结果,请注册更改监听器

版本 10.19.0 的新增功能

The Realm Swift SDK allows you to extend .searchable. When you use ObservedResults to query a realm, you can specify collection and keypath in the result set to mark it as searchable.

该集合是由 ObservedResults 查询表示的绑定集合。在本示例中,dogs 变量代表 Realm 中所有 Dog 对象的集合。

键路径是要搜索的对象属性。在本示例中,我们按狗的名称搜索狗的集合。Realm Swift .searchable 实现仅支持 String 类型的键路径。

struct SearchableDogsView: View {
@ObservedResults(Dog.self) var dogs
@State private var searchFilter = ""
var body: some View {
NavigationView {
// The list shows the dogs in the realm.
List {
ForEach(dogs) { dog in
DogRow(dog: dog)
}
}
.searchable(text: $searchFilter,
collection: $dogs,
keyPath: \.name) {
ForEach(dogs) { dogsFiltered in
Text(dogsFiltered.name).searchCompletion(dogsFiltered.name)
}
}
}
}
}

@ObservedResults属性包装器会打开一个 Realm 并返回指定类型的所有对象。 但是,您可以筛选或查询@ObservedResults ,以仅使用视图中对象的子集。

提示

另请参阅:

有关 Realm 支持的查询语法和查询类型的更多信息,请参阅:读取 - Swift SDK筛选数据 - Swift SDK

@ObservedResults要使用 NSPredicate Query API 筛选 ,请传递 NSPredicate 作为filter 的参数:

struct FilterDogsViewNSPredicate: View {
@ObservedResults(Dog.self, filter: NSPredicate(format: "weight > 40")) var dogs
var body: some View {
NavigationView {
// The list shows the dogs in the realm.
List {
ForEach(dogs) { dog in
DogRow(dog: dog)
}
}
}
}
}

版本 10.24.0 的新增功能:使用 where 对 ObservedResults 执行类型安全查询。

要将 @ObservedResultsRealm 类型安全查询 API 结合使用,请将闭包中的查询作为参数传递给 where

struct FilterDogsViewTypeSafeQuery: View {
@ObservedResults(Dog.self, where: ( { $0.weight > 40 } )) var dogs
var body: some View {
NavigationView {
// The list shows the dogs in the realm.
List {
ForEach(dogs) { dog in
DogRow(dog: dog)
}
}
}
}
}

10.29.0 版中的新增功能

@ObservedSectionedResults属性包装器会打开一个 Realm 并返回指定类型的所有对象,这些对象按指定的键路径划分为多个部分。 与上面的@ObservedResults类似,您可以过滤或查询@ObservedSectionedResults以仅使用视图中对象的子集:

@ObservedSectionedResults(Dog.self,
sectionKeyPath: \.firstLetter,
where: ( { $0.weight > 40 } )) var dogs

后退

写入数据

来年

处理同步错误