如何删除 SnapShot 侦听器(Firestore - Swift)
Posted
技术标签:
【中文标题】如何删除 SnapShot 侦听器(Firestore - Swift)【英文标题】:How to remove SnapShot listener (Firestore - Swift) 【发布时间】:2020-01-04 12:27:35 【问题描述】:func addUserObserver(_ update: @escaping () -> Void)
FriendSystem.system.USER_REF.addSnapshotListener snapshot, error in
self.userList.removeAll()
guard error == nil else
print("Error retreiving collection")
return
for document in snapshot!.documents
let email = document.get("email") as! String
if email != Auth.auth().currentUser?.email!
self.userList.append(User(userEmail: email, userID: document.documentID))
update()
我添加了一个监听器,但不知道如何断开/删除它。谢谢!
【问题讨论】:
您需要像let listener = FriendSystem.system...
一样添加一个变量来跟踪侦听器,然后再删除它,使用listener.remove()
。 Firestore 文档 Detach a listener 对此进行了介绍
【参考方案1】:
如detaching a listener上的文档所示,您需要保留从addSnapshotListener
返回的值:
var listener = FriendSystem.system.USER_REF.addSnapshotListener snapshot, error in
...
然后你可以删除监听器:
listener.remove()
【讨论】:
很好的答案,你打败了我。 感谢@Frank Vank Puffelen,但是当我这样做func removeUserListner() listener.remove()
时,我收到错误Use of unresolved identifier 'listener'
这意味着您已将listener
定义为removeUserListner
无法访问的范围。例如,如果 removeUserListner
是同一类中的一个方法,您将希望 listener
成为同一类的一个字段。以上是关于如何删除 SnapShot 侦听器(Firestore - Swift)的主要内容,如果未能解决你的问题,请参考以下文章
如何删除 DocumentSnapshot 事件的侦听器(Google Cloud FireStore)