#google-cloud-firestore #swiftui #filtering #swiftui-list
# #google-cloud-firestore #swiftui #фильтрация #swiftui-список
Вопрос:
Я думаю, что я просто слишком туп, чтобы справиться с этим. Я пытаюсь добавить больше критериев в свой список с возможностью поиска в SwiftUI. Список подключен к базе данных Firestore. Почему-то я не могу понять, как добавить больше критериев в панель поиска. Теперь у меня есть критерии «str» (в основном означает улицу), но я хочу добавить «sn» (serialnumber) и еще 2-3. В конце вы должны иметь возможность искать «[Серийный номер улицы …]» все в одной панели поиска.
Спасибо за помощь
Код:
struct CustomSearchBar : View {
@State var txt = ""
@Binding var data : [dataType]
var body : some View{
VStack(spacing: 0){
HStack{
TextField("Nach Seriennummer suchen", text: self.$txt).opacity(100).foregroundColor(.black)
if self.txt != ""{
Button(action: {
self.txt = ""
}) {
Text("Abbrechen")
}
.foregroundColor(.black)
}
}.padding()
if self.txt != ""{
if
self.data.filter({$0.str.lowercased().contains(self.txt.lowercased())}).count == 0 {
Text("Es wurde kein Gerät mit dieser Seriennummer gefunden").foregroundColor(Color.red.opacity(0.6)).padding()
}
else{
List(self.data.filter{$0.str.contains(self.txt.lowercased())}){i in
NavigationLink(destination: Detail(data: i)) {
Text(i.sn)
}
Text(i.typ)
}.frame(height: UIScreen.main.bounds.height / 5)
}
}
}.background(Color.white)
.padding()
}
}
Комментарии:
1. Используют ли ваши критерии какое-либо ключевое слово, например «sn: 12345», «str: 1600 Pennsylvania Ave.»? Если нет, то как вы узнаете, какая часть строки поиска применяется к каждому критерию?
2. @NRitH На данный момент, если я ищу, например, Pennsylvania Ave. , он будет искать по всем документам, если они соответствуют ключевому слову Pennsylvania Ave., и перечислять их. str, sn… типы данных и документы из моей базы данных Firestore. Все они объявлены как строки. Пример: пусть sn = i.get(«Seriennummer») как! Строка Единственное, что мне нужно, это добавить sn или другие типы в качестве критериев. теперь это просто «self.data.filter({$ 0.str.lowercased().contains(self.txt.lowercased())}).count == 0», но я хочу, чтобы он (пример) self.data.filter({$ 0.str,sn.lowercased().содержит(self.txt.lowercased())}).count == 0