Какой «тип» дескриптор Firebase для removeObserverWithHandle предполагается в Swift? - PullRequest
0 голосов
/ 30 декабря 2018

Что я должен инициализировать как дескриптор «наблюдатель»?

В настоящее время я делаю следующее: var handle: UInt?, это правильно?Предполагается, что это тип UInt или что-то еще?

Также в функции viewWillDisappear я проверяю, является ли дескриптор нулевым, перед тем как удалить его как таковой

if handle != nil {        
    // Remove the observer
    playerRef.child(ID).removeObserver(withHandle: handle!)
}

Таким образом, при удалении Observer устанавливается handleв ноль?

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

С https://github.com/firebase/firebase-ios-sdk/blob/master/Firebase/Database/Public/FIRDatabaseQuery.h:

/**
 * A FIRDatabaseHandle is used to identify listeners of Firebase Database events. These handles
 * are returned by observeEventType: and can later be passed to removeObserverWithHandle: to stop
 * receiving updates.
 */
typedef NSUInteger FIRDatabaseHandle NS_SWIFT_NAME(DatabaseHandle);
0 голосов
/ 31 декабря 2018

Из документации об отключении слушателей :

Когда вы добавляете блок обратного вызова в ссылку, возвращается FIRDatabaseHandle.Эти дескрипторы можно использовать для удаления блока обратного вызова.

Дескриптор, который вы передаете в removeObserver(withHandle:), является значением, которое возвращается, когда вы добавили этого наблюдателя.Он имеет тип DatabaseHandle, поэтому:

var refHandle: DatabaseHandle!

На той же странице документации приведен пример его использования:

refHandle = postRef.observe(DataEventType.value, with: { (snapshot) in
  let postDict = snapshot.value as? [String : AnyObject] ?? [:]
  // ...
})

Итак, вызатем используйте refHandle для удаления этого слушателя:

postRef.removeObserver(withHandle: refHandle)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...