筛选数据 — SwiftUI
在此页面上
在 SwiftUI 视图中观察
本页示例中使用的 @ObservedResults
属性包装器用于“SwiftUI 视图”。如果您想在视图模型中观察结果,请注册更改监听器。
搜索 Realm 集合
版本 10.19.0 的新增功能。
Realm Swift SDK允许您扩展.searchable 。当您使用 ObservedResults 查询域时,您可以在结果设立指定集合和键路径,将其标记为可搜索。
该集合是由 ObservedResults 查询表示的绑定集合。在本示例中,dogs
变量代表 Realm 中所有 Dog 对象的集合。
键路径是要搜索的对象属性。在本示例中,我们按狗的名称搜索狗的集合。Realm Swift .searchable
实现仅支持 String
类型的键路径。
struct SearchableDogsView: View { Dog.self) var dogs ( 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 并返回指定类型的所有对象。 但是,您可以筛选或查询@ObservedResults
,以仅使用视图中对象的子集。
使用 NSPredicate 进行过滤
@ObservedResults
要使用 NSPredicate Query API 筛选 ,请传递 NSPredicate 作为filter
的参数:
struct FilterDogsViewNSPredicate: View { 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) } } } } }
使用 Realm 类型安全 Query API 进行查询
版本 10.24.0 的新增功能:使用 where 对 ObservedResults 执行类型安全查询。
要将 @ObservedResults
与 Realm 类型安全查询 API 结合使用,请将闭包中的查询作为参数传递给 where
:
struct FilterDogsViewTypeSafeQuery: View { 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
以仅使用视图中对象的子集:
Dog.self, ( sectionKeyPath: \.firstLetter, where: ( { $0.weight > 40 } )) var dogs