Firebase: How to removeObserver (withHandle :) after observingSingleEvent ()?

I am using Firebase Database with fast. I can easily remove the observer from the DatabaseReference when I observe with databaseReference.observe(...):

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

...

databaseReference.removeObserver(withHandle: databaseHandle)

My problem is what I use databaseReference.observeSingleEvent(...). Since it does not return a FIRDatabaseHandle, I cannot remove the observer when I want.

I know that databaseReference.observeSingleEvent(...)removes an observer as soon as it was launched once. However, sometimes I need to remove an observer before he is fired.

I also know what I could use databaseReference.removeAllObservers(), but this is not a convenient solution in my case.

Do any of you know how I can prematurely remove Observer (created using observeSingleEvent(...)) from the database?

Thank you in advance

+4
1

databaseReference.observeSingleEvent(...) , , databaseReference.observe(...).

, , .

Update

:

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

    }

}
+3

Source: https://habr.com/ru/post/1674067/


All Articles