SwiftUI CoreData教程之 07 实现搜索和过滤

现在,您将实现搜索和实时过滤。首先,您需要添加一个@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

发表回复