如何分离另一个作用域中定义的侦听器?

时间:2020-04-04 12:19:57

标签: swift firebase google-cloud-firestore

我在viewWillAppear()函数中定义了一个侦听器,并试图在viewWillDisappear函数中将其删除/分离。但是,我无法在viewWillDisappear()函数中访问侦听器,因此无法使用.remove()来分离它。

我的代码:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)

     let db = Firestore.firestore()
     let docRef = db.collection("collection").document("document")

    let listener = docRef.addSnapshotListener { (querySnapshot, errur) in
     ....
     }
}




 override func viewWillDisappear(_ animated: Bool) {
    listener.remove() //ERROR: Use of unresolved identifier 'listener'
}

我意识到错误是因为“侦听器”是在另一个作用域中定义的,但是如何在viewWillDisappear()中删除它呢?

1 个答案:

答案 0 :(得分:0)

private var listener: ListenerRegistration?

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(true)

    let db = Firestore.firestore()
    let docRef = db.collection("collection").document("document")

    listener = docRef.addSnapshotListener { (querySnapshot, errur) in
         // ....
     }
}

override func viewWillDisappear(_ animated: Bool) {
    // always call super.viewWillDisappear also.
    super.viewWillDisappear(animated)
    listener.remove() //ERROR: Use of unresolved identifier 'listener'
    listener = nil
}