Firestore Swift实时更新文本
我有这种收集信息的方法Firestore Swift实时更新文本,swift,firebase,google-cloud-firestore,swiftui,Swift,Firebase,Google Cloud Firestore,Swiftui,我有这种收集信息的方法 struct MainText { var mtext: String var memoji: String } class MainTextModel: ObservableObject { @Published var maintext : MainText! init() { updateData() } func updateData() { let db = Firestore.firestore()
struct MainText {
var mtext: String
var memoji: String
}
class MainTextModel: ObservableObject {
@Published var maintext : MainText!
init() {
updateData()
}
func updateData() {
let db = Firestore.firestore()
db.collection("maintext").document("Main").getDocument { (snap, err) in
if err != nil{
print((err?.localizedDescription)!)
return
}
let memoji = snap?.get("memoji") as! String
let mtext = snap?.get("mtext") as! String
DispatchQueue.main.async {
self.maintext = MainText(mtext: mtext, memoji: memoji)
}
}
}
}
这样的一种展示方式
@observeobject private var viewModel=MainTextModel()
self.viewModel.maintext.memoji
self.viewModel.maintext.mtext
如何在不重新启动视图的情况下进行联机更新?您需要添加快照侦听器,而不是使用只获取文档一次且不返回更新的
getDocument
以下是Firestore的文档:
在您的情况下,您需要执行以下操作:
db.collection("maintext").document("Main")
.addSnapshotListener { documentSnapshot, error in
guard let document = documentSnapshot else {
print("Error fetching document: \(error!)")
return
}
guard let data = document.data() else {
print("Document data was empty.")
return
}
if let memoji = data["memoji"] as? String, let mtext = data["mtext"] as? String {
self.maintext = MainText(mtext: mtext, memoji: memoji)
}
}
您需要添加快照侦听器,而不是使用只获取文档一次且不返回更新的
getDocument
以下是Firestore的文档:
在您的情况下,您需要执行以下操作:
db.collection("maintext").document("Main")
.addSnapshotListener { documentSnapshot, error in
guard let document = documentSnapshot else {
print("Error fetching document: \(error!)")
return
}
guard let data = document.data() else {
print("Document data was empty.")
return
}
if let memoji = data["memoji"] as? String, let mtext = data["mtext"] as? String {
self.maintext = MainText(mtext: mtext, memoji: memoji)
}
}
线路有问题,如果让我。。。类型“[String:Any]”的值没有成员“get”,并且表达式类型不明确,没有更多上下文。抱歉-已编辑以修复该行。请重试
DispatchQueue.main.async
在firebase闭包中不需要;UI调用总是在主线程上完成,而在后台线程上进行联网。不会伤害任何东西,但可以节省一些输入;-)很高兴知道--谢谢。如果让我。。。类型“[String:Any]”的值没有成员“get”,并且表达式类型不明确,没有更多上下文。抱歉-已编辑以修复该行。请重试DispatchQueue.main.async
在firebase闭包中不需要;UI调用总是在主线程上完成,而在后台线程上进行联网。不会伤害任何东西,但可以节省一些输入;-)很高兴知道,谢谢。