【发布时间】:2021-03-15 21:18:51
【问题描述】:
我知道这是一个非常简单的问题,但我只是坚持使用 atm,所以任何建议都将不胜感激,因为我是 SwiftUI 的新手。
我正在尝试从 firebase 下载文本并将其渲染到视图中,但我不断收到超出范围的错误:
致命错误:索引超出范围:文件 Swift/ContiguousArrayBuffer.swift,第 444 行
代码如下:
var body: some View{
ZStack {
if fetch.loading == false {
LoadingView()
}
else{
Text(names[0])
.bold()
}
}
.onAppear {
self.fetch.longTask()
}
}
这是获取内容页面:
@Published var loading = false
func longTask() {
DispatchQueue.main.asyncAfter(deadline: .now()) {
let db = Firestore.firestore()
db.collection("Flipside").getDocuments { (snapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
return
} else {
for document in snapshot!.documents {
let name = document.get("Name") as! String
let description = document.get("Description") as! String
//name = items[doc]
print("Names: ", name)
print("Descriptions: ", description)
names.append(name)
descriptions.append(description)
}
}
}
self.loading = true
}
}
所以基本上当视图出现时,从 Firebase 获取数据,当数据下载后显示 menuPage() 直到然后显示 Loading Data 文本。
欢迎任何帮助!
【问题讨论】:
-
这不会解决您的问题,但仅供参考,您的
completed()调用将在 Firebase 调用完成之前发生,因为getDocuments是一个异步函数。您需要在getDocuments闭包中调用completed以使其表现得像您正在寻找的那样。 -
@jnpdx 非常感谢您的回复!我现在补充一下!你知道我还需要做什么才能让它按预期工作吗?