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

筛选数据 — SwiftUI

在此页面上

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

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

版本 10.19.0 的新增功能

Realm Swift SDK允许您扩展.searchable 。当您使用 ObservedResults 查询域时,您可以在结果设立指定集合和键路径,将其标记为可搜索。

该集合是由 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

后退

写入数据