У меня есть этот код firebase.
self.db.collection("ustas").getDocuments(){ (querysnapshot,err) in
for document in querysnapshot!.documents {
}
}
Здесь я в основном получаю все документы из коллекции ustas
. Теперь мне нужно представить его в виде списка. Я попробовал, сначала создав функцию перед телом и присвоив все значения переменной, а затем повторяя эту переменную. Примерно так:
@State var ustasList: Array<Usta> = []
func getUstalar() -> Array<Usta>{
var templist: Array<Usta> = []
DispatchQueue.main.async {
self.db.collection("ustas").getDocuments(){ (querysnapshot,err) in
for document in querysnapshot!.documents {
let data = document.data()
let newUsta = Usta(id: UUID(), name: data["name"] as! String, type: data["type"] as! String,telephone: data["telephone"] as! String)
templist.append(newUsta)
}
}
}
return templist
}
var body: some View {
NavigationView{
List{
ForEach(0..<self.ustasList.count){ i in
Text(self.ustasList[i].name)
}
}
}
.onAppear(){
self.ustasList = self.getUstalar()
}
}
Но это не сработало, потому что return templist
было выполнено раньше, чем getDocuments (). Затем я попытался поместить код firebase в список, например:
List{
self.db.collection("ustas").getDocuments(){ (querysnapshot,err) in
for document in querysnapshot!.documents {
let data = document.data()
Text(data["name"])
}
}
}
Но он дал мне Type 'Void' cannot conform to 'View'; only struct/enum/class types can conform to protocols
. Как правильно сделать это в Swift?