Добавить несколько критериев поиска в панель поиска SwiftUI?

#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