【发布时间】:2019-10-31 20:32:41
【问题描述】:
我正在尝试从 Firestore 获取玩具列表并将其放入数组中 但是当我调用函数时,它返回空数组,返回后打印玩具对象,所以顺序被破坏了。
我认为闭包会对我有所帮助,但我认为我不知道如何使用它们,而且来自 Google 的示例对我没有帮助
这是我的代码(我使用 SwiftUI,所以我创建了带有变量的 swift 文件)
let db = Firestore.firestore()
class DataLoade {
func loadFirebase(completionHandler: @escaping (_ toys: [Toy]) -> ()){
var toysar: [Toy] = []
let toysRef = db.collection("Toys")
toysRef.getDocuments() { (querySnapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in querySnapshot!.documents {
var name: String = document.get("name") as! String
var id: Int = document.get("id") as! Int
var description: String = document.get("description") as! String
var imageName: String = document.get("imageName") as! String
var price: String = document.get("price") as! String
var category: String = document.get("category") as! String
var timeToy = Toy(id: id, name: name, imageName: imageName, category: category, description: description, price: price)
toysar.append(timeToy)
}
}
}
completionHandler(toysar)
// print(toysar)
}
}
就是这样打印出来的:
[] // it prints empty array, but it is in the end of the code
Toy(id: 1001, name: "Pikachu", imageName: "pikachu-plush", category: "lol", description: "kek", price: "350₽") // and now it prints Toy object, however it is in the start of the code
好的,所以我尝试为我的函数创建完成处理程序,就像在“重复”答案中一样,但这不起作用:数组在完成处理程序工作之前返回
ContentView.swift
func updateArray() -> [Toy]{
dl.loadFirebase() { toys in
ll = toys
}
print("lol \(datas)") // prints «lol []»
return ll
}
【问题讨论】:
标签: ios arrays swift google-cloud-firestore swiftui