如何解决如何在 SwiftUI 中使用带有新的可搜索修饰符的@FetchRequest?
是否可以将新的 searable
与 @FetchRequest
结合使用?
struct FooListView: View {
@Environment(\.managedobjectContext) private var viewContext
@FetchRequest(
sortDescriptors: [NSSortDescriptor(keyPath: \Foo.name,ascending: true)],animation: .default)
private var items: FetchedResults<Foo>
@State var searchText = ""
var body: some View {
NavigationView {
List {
ForEach(items) { item in
NavigationLink(destination: FooView(Foo: item)) {
Text(item.wrappedname)
}
}
.onDelete(perform: deleteItems)
}
.searchable(text: $searchText)
.navigationTitle("Foos")
}
}
}
在这个简单的例子中,我想使用 searchText
来跟踪我的 FetchedResults
。
解决方法
WWDC 2021 为 Swift 带来核心数据并发性,SwiftUI 在 21:33 左右提供了一个很好的例子
https://developer.apple.com/wwdc21/10017
struct ContentView: View {
@FetchRequest(sortDescriptors: [SortDescriptor(\Quake.time,order: .reverse)])
private var quakes: FetchedResults<Quake>
@State private var searchText = ""
var query: Binding<String> {
Binding {
searchText
} set: { newValue in
searchText = newValue
quakes.nsPredicate = newValue.isEmpty
? nil
: NSPredicate(format: "place CONTAINS %@",newValue)
}
}
var body: some View {
List(quakes) { quake in
QuakeRow(quake: quake)
}
.searchable(text: query)
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。