【发布时间】:2020-03-02 09:22:42
【问题描述】:
我正在尝试显示 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()”方法完成。谢谢
【问题讨论】:
-
为类型保留大写属性,利用
guard或if-else在访问快照之前安全地解包,并与您的编码更加一致(例如:如果您保留viewDidLoad调用实例方法,不要只对一些做,对所有做)。早点养成好习惯!
标签: ios arrays swift firebase google-cloud-firestore