【问题标题】:How do I detach a listener defined in another scope?如何分离在另一个范围中定义的侦听器?
【发布时间】:2020-04-04 12:19:57
【问题描述】:

我在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() 中删除它?

【问题讨论】:

    标签: swift firebase google-cloud-firestore


    【解决方案1】:
    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
    }
    

    【讨论】:

    • 嘿,谢谢。仅供有相同问题的人将来参考,我相信类型是“ListenerRegistration”。
    猜你喜欢
    • 2021-05-07
    • 2021-07-12
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多