移除火力基地监听者

问题描述 投票:0回答:1

我正在将Firebase用作后端服务,并且正在viewDidLoad上使用以下功能来获取数据,并且一切正常。在获取所有数据后的某个时刻,我想删除该侦听器(仅在首次加载时运行并获取数据)。我该如何实现?以下是我在viewDidLoad上调用的函数:

private func loadShops(_ category: String) {
    db.collection(category).addSnapshotListener { snapshot, error in
        guard error == nil else {
            print(error!.localizedDescription)
            return
        }

        if let docs = snapshot?.documents {
            for doc in docs {
                self.shops = []
                let shopData = doc.data()
                var newShop = Shop()
                newShop.shopName = shopData["name"] as? String ?? "Empty Name"
                newShop.discountPercentage = shopData["discount"] as? String ?? "0"
                newShop.shopArea = shopData["area"] as? String ?? "Empty Area"
                newShop.shopCity = shopData["city"] as? String ?? "Empty City"
                newShop.phoneNumber = shopData["phone number"] as? String ?? "Empty Phone Number"
                newShop.services = shopData["services"] as? String ?? "Empty Services"
                self.shops.append(newShop)
                self.shops.shuffle()
            }
            self.shopsView.tableView.reloadData()
        }
    }
}
ios swift
1个回答
0
投票

基于上面的API示例-我假设您使用的是Firestore API,而不是较旧的Firebase。

如果是Firestore,则可以仅使用查询访存而不是快照侦听器。请参阅https://firebase.google.com/docs/firestore/query-data/queries#execute_a_query

private func loadShops(_ category: String) {
    db.collection(category).getDocuments() { (querySnapshot, err) in
        if let err = err {
            print("Error getting documents: \(err)")
        } else if let querySnapshot = querySnapshot {
            for document in querySnapshot.documents {
                print("\(document.documentID) => \(document.data())")
                // do the conversion to model object.
            }
        }
}

仅当您要继续监视云中的新文档时,才使用快照侦听器。根据定价文档,它也很昂贵。

© www.soinside.com 2019 - 2024. All rights reserved.