# #swift #xcode #firebase #firebase-realtime-database
Вопрос:
Я только начинаю изучать swift и firebase. Я хочу добавить строку поиска, которая позволит пользователям выполнять поиск в моей базе данных firebase. Это то, что я хочу получить:
Я добавил строку поиска, с чем у меня возникли проблемы, так это с отображением результатов поиска. Не могли бы вы, пожалуйста, показать мне, какой код мне нужен для получения данных из базы данных? Пожалуйста, Помогите! Спасибо!
import SwiftUI import Firebase struct ContentView: View { @ObservedObject var data = getData() var body: some View { NavigationView{ ZStack(alignment: .top){ GeometryReader{_ in // Home View.... Text("Home") }.background(Color("Color").edgesIgnoringSafeArea(.all)) CustomSearchBar(data: self.$data.datas).padding(.top) }.navigationBarTitle("") .navigationBarHidden(true) } } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } } struct CustomSearchBar : View { @State var txt = "" @Binding var data : [dataType] var body : some View{ VStack(spacing: 0){ HStack{ TextField("Search", text: self.$txt) if self.txt != ""{ Button(action: { self.txt = "" }) { Text("Cancel") } .foregroundColor(.black) } }.padding() if self.txt != ""{ if self.data.filter({$0.name.lowercased().contains(self.txt.lowercased())}).count == 0{ Text("No Results Found").foregroundColor(Color.black.opacity(0.5)).padding() } else{ List(self.data.filter{$0.name.lowercased().contains(self.txt.lowercased())}){i in NavigationLink(destination: Detail(data: i)) { Text(i.name) } }.frame(height: UIScreen.main.bounds.height / 5) } } }.background(Color.white) .padding() } } class getData : ObservableObject{ @Published var datas = [dataType]() init() { let db = Firestore.firestore() db.collection("items").getDocuments { (snap, err) in if err != nil{ print((err?.localizedDescription)!) return } for i in snap!.documents{ let id = i.documentID let name = i.get("name") as! String let msg = i.get("msg") as! String self.datas.append(dataType(id: id, name: name, msg: msg)) } } } } struct dataType : Identifiable { var id : String var name : String var msg : String } struct Detail : View { var data : dataType var body : some View{ Text(data.msg) } }
Комментарии:
1. Пара предложений: 1) В Swift имена типов (например, ваши
getData
иdataType
) обычно начинаются с заглавной буквы. Это облегчит другим людям чтение/анализ вашей работы. 2) Отредактируйте свой вопрос, укажите все шаги, которые вы предприняли для устранения этой проблемы. Например, вы получаете ошибку приgetDocuments
вызове? Возвращает ли коллекция какие-либо документы? Вы получаете сбой, когда пытаетесь принудительно разыграть какой-либо из предметов с помощьюas!
? Вы смотрели на отладчик, чтобы узнать, сколько элементов вself.datas
нем ? Все это может помочь нам решить вашу проблему.