swift - 如何使用 Swift 从 Firebase DB 引用路径中删除观察者?

标签 swift firebase firebase-realtime-database observers

我正在使用 DataService 单例类按照以下函数成功读取和监听 Firebase 路径 users 中的数据更改。

Firebase 引用:

REF_USERS = DB_BASE.child("users")

函数附加/监听路径和转义:

func getUsers(handler: @escaping (_ name: String, _ discoverable: Bool) -> ()){

   REF_USERS.observe(.value) { (snapshot) in
        guard let usersSnapshot = snapshot.children.allObjects as? [DataSnapshot] else { return }
        for user in usersSnapshot{
            let name = user.childSnapshot(forPath: "name").value as! String
            let discoverable = user.childSnapshot(forPath: "discoverable").value as! Bool

            handler (name, discoverable)
        }
    }

}

我在我的 DiscoverVC 中使用上面的函数:

DataService.run.getUsers { (name, discoverable) in
            print("name: \(name), discoverable: \(discoverable)")
        }

如何从 viewWillDisappear 函数中的 DiscoverVC 移除观察者?

我知道我需要在 removeObserver 调用中传递一个 DatabaseHandle,我该如何构建句柄?

override func viewWillDisappear(_ animated: Bool) {

        DataService.run.REF_USERS.removeObserver(withHandle: <#T##UInt#>)
    }

最佳答案

根据Firebase documentation on detaching listeners :

When you add a callback block to a reference, a FIRDatabaseHandle is returned. These handles can be used to remove the callback block.

所以在你的情况下:

handle = REF_USERS.observe(.value) { (snapshot) in
  ...
}

然后在您的 viewWillDisappear 中:

override func viewWillDisappear(_ animated: Bool) {
    DataService.run.REF_USERS.removeObserver(withHandle: handle)
}

关于swift - 如何使用 Swift 从 Firebase DB 引用路径中删除观察者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50949457/

相关文章:

ios - 计算双返回科学记数法

swift - Alamofire JSON .GET 编码到数组

ios - 如何对要添加的单元格进行排序,将其添加到先前单元格的顶部还是先前单元格的底部

firebase - 由于 CORS 策略,无法在前端调用 firebase 'onCall' 函数

javascript - query.startAt 数据库规则权限被拒绝

ios - 尝试将多个图像上传到Firebase : 2 Errors in SWIFT 4, FIREBASE 5.0.0

android - 将flutter项目发布到Play商店后Firebase Auth登录不起作用

ios - 重置推送通知/设备注册/实例 ID - 通过 TestFlight 或 App Store 更新应用程序 - Firebase 云消息传递 iOS/React Native Firebase

java - 我应该如何查询仅具有特定用户 ID 的 recyclerview 中的帖子?

android - 从 Firebase 实时数据库 Android 查询嵌套数据