一个简单的搜索表单(如电影等(,数据库中有一些信息,我进行了实时搜索,但由于某种原因,List参数显示了所有值在我开始键入搜索表单之前,从搜索表单下的数据库中,但结果应该在我键入关键字母或单词时显示救命!
内容视图:
import SwiftUI
import Firebase
struct ContentView: View {
@State var search = ""
@ObservedObject var data = getData()
var body: some View {
NavigationView{
List {
ForEach(self.data.datas.filter {(self.search.isEmpty ? true : $0.title.localizedCaseInsensitiveContains(self.search))}, id: .id) { rs in
NavigationLink(destination: Detail(data: rs)) {
Text(rs.title)
}
}
}
.navigationBarTitle("Search item")
.searchable(text: self.$search)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct Detail : View {
var data : dataType
var body : some View{
VStack {
Text(data.title)
.font(.title)
.fontWeight(.bold)
Text(data.description)
}.padding()
}
}
您可以尝试这个示例代码,在搜索栏中键入内容之前,它不会显示任何内容。它还考虑了";HEEELP";。
struct ContentView: View {
@State var search = ""
@StateObject var data = getData() // <-- here
// -- here, replace `DataType` with your type of `data.datas`
var searchResults: [DataType] {
if search == "HEEELP" {
return data.datas // return everything
} else {
return search.isEmpty
? [] // return nothing
: data.datas.filter{$0.title.localizedCaseInsensitiveContains(search)} // filtered
}
}
var body: some View {
NavigationView{
List {
ForEach(searchResults, id: .id) { rs in // <-- here
NavigationLink(destination: Detail(data: rs)) {
Text(rs.title)
}
}
}
.navigationBarTitle("Search item")
.searchable(text: self.$search)
}
}
}