首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从Firestore侦听器分离

从Firestore侦听器分离
EN

Stack Overflow用户
提问于 2018-06-06 17:19:52
回答 1查看 4.6K关注 0票数 4

我和Swift一起使用Firestore。

我有一个单例数据类UserManager。我从不同的ViewControllers调用它来获取数据以填充我的表视图。我希望表视图在集合更新时自动更新,因此我需要使用SnapshotListener。一切正常,但我不确定当Viewcontroller关闭时如何从侦听器分离。

在单例类中,我有如下方法。该方法给出了一个用户列表,并将从我的应用程序周围的几个不同位置进行调用。

我还想返回一个对listener的引用,以便在Viewcontroller关闭时可以与之分离。但我不能让它工作。下面的解决方案给出了编译器错误。

我一直在尝试查看引用,例如这里的https://firebase.google.com/docs/firestore/query-data/listen,但当数据加载到单个类中而不是直接加载到视图控制器中时,我需要让它工作。去这里的路怎么走?

在UserManager中:

代码语言:javascript
复制
func allUsers(completion:@escaping ([User], ListenerRegistration?)->Void) {
    let listener = db.collection("users").addSnapshotListener { querySnapshot, error in
        if let documents = querySnapshot?.documents {
            var users = [User]()
            for document in documents {
                let user = User(snapshot: document)
                users.append(user)
            }
            completion(users, listener)
        }
    }
}

在ViewController中:

代码语言:javascript
复制
override func viewDidLoad() {
    super.viewDidLoad()
    UserManager.shared.allUsers(completion: { (users, listener) in
        self.users = users
        self.listener = listener
        self.tableView.reloadData()
    })
}

deinit {
    self.listener.remove()
}
EN

回答 1

Stack Overflow用户

发布于 2018-06-06 17:52:09

我认为你要找的是getDocument而不是addSnapshotListener。使用此方法,侦听器将在请求结束时自动分离...它将类似于

代码语言:javascript
复制
 func allUsers(completion:@escaping ([User])->Void) {
 db.collection("users").getDocument { querySnapshot, error in
     if let documents = querySnapshot?.documents {
         var users = [User]()
         for document in documents {
             let user = User(snapshot: document)
             users.append(user)
         }
         completion(users)
     }
 } }
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50716670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档