gpt4 book ai didi

ios - 火力地堡 : How to removeObserver(withHandle:) after observeSingleEvent()?

转载 作者:搜寻专家 更新时间:2023-10-31 19:28:42 25 4
gpt4 key购买 nike

我将 Firebase 数据库与 swift 结合使用。当我使用 databaseReference.observe(...) 进行观察时,我可以轻松地从 DatabaseReference 中删除观察者:

databaseHandle = databaseReference.observe(
.value,
with: { (snapshot) in ... },
withCancel: { (error) in ... })

...

databaseReference.removeObserver(withHandle: databaseHandle)

我的问题是当我使用 databaseReference.observeSingleEvent(...) 时。因为它不返回 FIRDatabaseHandle,所以我无法在需要时删除观察者。

我知道 databaseReference.observeSingleEvent(...) 会在观察者被触发后立即将其移除。但是,有时我需要在观察者被解雇之前将其移除。

我也知道我可以使用 databaseReference.removeAllObservers(),但这对我来说不是一个方便的解决方案。

你们中有人知道我如何从 databaseReference 中过早地删除观察者(使用 observeSingleEvent(...) 创建)吗?

提前致谢

最佳答案

由于 databaseReference.observeSingleEvent(...) 不返回一个句柄,您可以删除唯一的选择是使用 databaseReference.observe(...) .

当您需要第一个事件触发时,只需手动移除 handle 。

更新

尝试使用这个扩展:

public extension FIRDatabaseReference {

@discardableResult
public func observeOneEvent(of eventType: FIRDataEventType, with block: @escaping (FIRDataSnapshot) -> Swift.Void) -> FIRDatabaseHandle {

var handle: FIRDatabaseHandle!
handle = observe(eventType) { (snapshot: FIRDataSnapshot) in
self.removeObserver(withHandle: handle)
block(snapshot)
}

return handle

}

}

关于ios - 火力地堡 : How to removeObserver(withHandle:) after observeSingleEvent()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43226616/

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