在Firebase中更改值后移除观察者

我在ViewController中有全局的观察者,并且需要一些不同的观察者,像下面这样。 值更改一次后,是否可以删除观察者?

var ref = Firebase(url: "https://<FIREBASE-APP>.firebaseio.com/") let handle = ref.observeEventType(.Value, withBlock: { snapshot in //Here VALUE Changes to NEW_VALUE if snapshot.value as! String == NEW_VALUE { //IS IT POSSIBLE TO REMOVE HANDLE HERE???? ...something here } }) //NOT HERE ...ref.removeObserverWithHandle(handle) 

这是您需要在Swift中采取额外步骤的情况之一,因为它没有意识到您可以安全地访问块内的handle

解决这个问题的一种方法是:

 let ref = Firebase(url: "https://yours.firebaseio.com/") var handle: UInt = 0 handle = ref.observeEventType(.Value, withBlock: { snapshot in print(snapshot) if snapshot.exists() && snapshot.value as! String == "42" { print("The value is now 42") ref.removeObserverWithHandle(handle) } }) 

通过显式初始化handlevariables,我们从Swift编译器中删除错误。 但是鉴于在调用块之前已经设置了句柄,我们可以安全地在块内调用ref.removeObserverWithHandle(handle)

我通常喜欢较less的variables和我为类写的应用程序不那么复杂。

我会select这个:

  let ref = Firebase(url: "https://yours.firebaseio.com/") ref.observe(.value, with: { snapshot in if snapshot.exists() && snapshot.value as! String == "42" { ref.removeAllObservers() } }})