提问者:小点点

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]

共1个答案

匿名用户

您不应该在这里调用您的update():-

for document in snapshot!.documents {
            let id = document.documentID
            self.getUser(id, completion: { (user) in
                self.friendList.append(user)
                update()
            })
        }

相反,您应该在for循环完成后调用它。