我正在尝试根据从Firebase上的文档集中下载的数据构建一系列项目。我从一个空数组开始,然后针对每个文档,根据从该文档下载的数据制作一个项目,并将该项目附加到数组中。但是,它返回一个空数组。我觉得我需要对完成处理程序做一些事情,但是我不太了解如何完成。下面是我的代码。谢谢!
func getDayData() -> [Item] {
var myList = [Item]()
let docs = Firestore.firestore().collection("Users").document("pK0tVBXvbFNhTZic3PIM").collection("Log").document("18-06-2020").collection("Items")
docs.getDocuments() {(querySnapshot, err) in
if let err = err {
//TODO
} else {
for document in querySnapshot!.documents {
myList.append(Item(id: document.documentID, item: document.get("Item") as! String, category: document.get("Category") as! String, pieces: document.get("Pieces") as! Int))
}
}
}
return myList
}
答案 0 :(得分:4)
您不能等待异步方法完成。您需要在方法中添加完成处理程序:
func getDayData(completion: @escaping ([Item]?, Error?) -> Void) {
Firestore.firestore()
.collection("Users")
.document("pK0tVBXvbFNhTZic3PIM")
.collection("Log")
.document("18-06-2020")
.collection("Items")
.getDocuments() { querySnapshot, error in
let items = querySnapshot?.documents.map {
Item(id: $0.documentID,
item: $0.get("Item") as? String ?? "",
category: $0.get("Category") as? String ?? "",
pieces: $0.get("Pieces") as? Int ?? 0)
}
completion(items, error)
}
}
用法:
getDayData { items, error in
guard let items = items else {
print(error ?? "nil")
return
}
// use items here
}