规则是“如果您更新在另一个线程中工作的闭包内的用户界面,那么您应该调用 DispatchQueue.main.async 方法。但是,在我从 Firestore 检索数据后,tableview.reloadData() 仍然在不存在 DispatchQueue.main.async 方法的情况下工作,它在闭包内的 MainThread 中工作。这怎么可能?有什么改变吗?Xcode 版本 12.4;Swift 版本 5
func loadMessages(){
messages = []
db.collection(K.FStore.collectionName).getDocuments { (querySnapShot, error) in
if let err = error {
print("There was an issue retrieving data from Firestore. \(err)")
}else{
if let snapShotDocuments = querySnapShot?.documents{
for doc in snapShotDocuments{
let data = doc.data()
if let messageSender = data[K.FStore.senderField] as? String,let messagebody = data[K.FStore.bodyField] as? String{
let newMessage = Message(sender: messageSender, body: messagebody)
self.messages.append(newMessage)
}
}
}
if Thread.isMainThread{
self.tableView.reloadData()
}
}
}
}
Firestore SDK(和大多数 Firebase SDK)在主线程上调用您的回调,以便您可以轻松更新 UI。它们过渡到主线程,因此您不必这样做。
也可以在这里看到我的回答:
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句