Данные не отображаются в Swiftui с использованием Firebase - PullRequest
0 голосов
/ 31 января 2020

Может кто-нибудь сказать мне, что я делаю не так? Я использую Swiftui и базу данных Firebase. Я не вижу ошибок или каких-либо данных на экране. Я установил Pod и проверил правила безопасности в консоли. Я попробовал несколько других методов, но это было точно так же из учебных пособий по YouTube, за исключением имени коллекции и полей.

import SwiftUI
import Firebase



struct Calories: 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 Calories_Previews: PreviewProvider {
    static var previews: some View {
        Calories()
    }
}

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.item.lowercased().contains(self.txt.lowercased())}).count == 0{

                    Text("No Results Found").foregroundColor(Color.black.opacity(0.5)).padding()
                }
                else{

                List(self.data.filter{$0.item.lowercased().contains(self.txt.lowercased())}){i in

                NavigationLink(destination: Detail(data: i)) {

                        Text(i.item)
                    }


                    }.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("HSCal").getDocuments { (snap, err) in

            if err != nil{

                print((err?.localizedDescription)!)
                return
            }

            for i in snap!.documents{

                let id = i.documentID
                let item = i.get("item") as! String
                let cal = i.get("cal") as! String

                self.datas.append(dataType(id: id, item: item, cal: cal))
            }
        }
    }
}

struct dataType : Identifiable {

    var id : String
    var item : String
    var cal : String
}

struct Detail : View {

    var data : dataType

    var body : some View{

        Text(data.item)
    }
}

1 Ответ

0 голосов
/ 31 января 2020

вы положили комплект приложений?

попробуйте

struct Calories: View {
    @EnvironmentObject var List: getData()
    ....
}

позвоните

Calories().environmentObject(DataList) 

объявите где-нибудь

var DataList = getData()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...