ios - Firestore iOS - 为什么我的阵列多次打印出来?
问题描述
我成功地能够在表格视图中显示用户朋友数组,但是当我打印出数组时,它打印了 3 次而不是 1 次,我该如何解决这个问题?
好友系统型号:
var removeFriendListener: ListenerRegistration!
func addFriendObserver(_ update: @escaping () -> Void) {
removeFriendListener = CURRENT_USER_FRIENDS_REF.addSnapshotListener{ snapshot, error in
self.friendList.removeAll()
guard error == nil else {
#if DEBUG
print("Error retreiving collection")
#endif
return
}
for document in snapshot!.documents {
let id = document.documentID
self.getUser(id, completion: { (user) in
self.friendList.append(user)
update()
})
}
if snapshot!.documents.count == 0 {
update()
}
}
}
func removeFriendObserver() {
removeFriendListener.remove()
}
好友系统视图控制器:
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
FriendSystem.system.addFriendObserver { () in
DispatchQueue.main.async {
self.tableView.reloadData()
}
print(FriendSystem.system.friendList)
}
}
数组打印出来
[App.User]
[App.User, App.User]
[App.User, App.User, App.User]
解决方案
你不应该在这里调用你的 update() :-
for document in snapshot!.documents {
let id = document.documentID
self.getUser(id, completion: { (user) in
self.friendList.append(user)
update()
})
}
相反,您应该在 for 循环完成后调用它。
推荐阅读
- php - 从 AJAX 调用下载文件而不将其保存到网络服务器
- c# - 如何使用 rest Sharp 传递 x-APi-key
- android - 运行时更改状态栏灯状态
- if-statement - Google 表格中的 IF 语句
- mongodb - 使用区块链时,您真的需要 AWS 或 MongoDB 等数据库服务吗?
- html - 获取 CSS 缩放变换以更改垂直滚动条?
- python - 如何用 df1 替换 df 列名
- sql - 循环遍历表和字段列表并将它们混合
- python-3.x - Azure 自定义视觉对象检测高延迟
- html - 具有自动适应所有内容的等宽列的 HTML/CSS 表格