Как вызвать Firebase в swift

# #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 нем ? Все это может помочь нам решить вашу проблему.