我能够成功地在表格视图中显示用户的朋友数组,但是当我打印出它得到的数组是打印出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循环完成后调用它。