gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 14:34:59 26 4
gpt4 key购买 nike

我正在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com