现在,您将实现搜索和实时过滤。首先,您需要添加一个@State属性来保存当前搜索的值。在ContentView.swift 中,直接在下面添加以下内容selectedSort:
@State private var searchTerm = ""
接下来,在 下searchTerm,创建将处理更新获取请求的绑定属性:
var searchQuery: Binding<String> {
Binding {
// 1
searchTerm
} set: { newValue in
// 2
searchTerm = newValue
// 3
guard !newValue.isEmpty else {
friends.nsPredicate = nil
return
}
// 4
friends.nsPredicate = NSPredicate(
format: "name contains[cd] %@",
newValue)
}
}
上面的代码执行以下操作:
- 在searchTerm属性上创建绑定。
- 每当searchQuery更改时,它都会更新searchTerm。
- 如果字符串为空,它会删除任何现有的提取谓词。这将删除任何现有的过滤器并显示 Besties 的完整列表。
- 如果搜索词不为空,它会创建一个以搜索词为条件的谓词,并将其应用于提取请求。
最后,在searchable修改器List之前向视图添加一个修改.toolBar器:
.searchable(text: searchQuery)
此修饰符将搜索字段的值绑定到searchQuery您刚刚创建的属性。这会将您的搜索字段连接到您的 fetch 请求的动态谓词。
构建并运行并尝试新的搜索。显示 Besties 列表后,下拉以显示搜索字段。开始键入搜索,您将看到基于搜索字段内容的列表过滤器。优秀!
精品教程推荐
加入我们一起学习SwiftUI
QQ:3365059189
SwiftUI技术交流QQ群:518696470
教程网站:www.openswiftui.com