我正在尝试显示Firebase数据库的内容。我知道我可以正确读取它们,因为可以在读取时打印它们。问题是当我调用在屏幕上显示它们的方法时,它们“不在范围内”。
我知道这意味着方法被同时调用,因此数组为空。我已经尝试过“ Sleep()”方法,但无法正常工作。
//arrays of names and descriptions
var Names:[String] = []
var Desctiptions: [String] = []
初始方法
override func viewDidLoad() {
super.viewDidLoad()
getRestauraunt()
//create slides
scrollView.delegate = self
slides = createSlides()
setupSlideScrollView(slides: slides)
}
func getRestauraunt(){
let db = Firestore.firestore()
db.collection("Test").getDocuments { (snapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
} else {
for document in snapshot!.documents {
let name = document.get("Name") as! String
let description = document.get("Description") as! String
//print("Names: ",name," Description: ",description)
self.Names.append(name)
self.Desctiptions.append(description)
}
}
}
}
创建幻灯片方法
func createSlides() -> [Slide] {
//firebase link
let slide1:Slide = Bundle.main.loadNibNamed("Slide", owner: self, options: nil)?.first as! Slide
slide1.labelTitle.text = Names[0]
}
我想知道是否有人可以向我展示如何获取'createSlides()'方法来等待'getRestauraunts()'方法完成。谢谢
答案 0 :(得分:2)
只需从getrestaurant()
的{{1}}结束处调用它即可
getDocuments
顺便说一句,也许值得创建一个简单的 func getRestauraunt(){
//as before...
} else {
for document in snapshot!.documents {
let name = document.get("Name") as! String
let description = document.get("Description") as! String
self.Names.append(name)
self.Desctiptions.append(description)
}
self.createSlides()
}
}
}
结构,该结构具有name和description属性,并且只有一个数组:Document