应用程序变量更改时触发 Firestore 查询
Posted
技术标签:
【中文标题】应用程序变量更改时触发 Firestore 查询【英文标题】:Trigger a Firestore Query when application variable changes 【发布时间】:2020-08-28 14:34:49 【问题描述】:这可能是一个非常基本的问题,但我是 SwiftUI 和 Firestore 的新手,所以我有点挣扎。我正在构建一个显示我附近俱乐部位置的应用程序。我在 Firestore 中有我的 Clubs 集合,每个文档都有一个 geoPoint 和 geoHash。当我启动应用程序时,我使用位置管理器向我提供当前位置,然后我将其转换为 searchGeoHash 和 searchGeoBox,然后查询 Firestore,如下所示:
@Published var searchGeoHash: String = Geohash.encode(latitude: locationManager.location?.latitude ?? 0, longitude: locationManager.location?.longitude ?? 0, 5)
@Published var searchGeoBox: [String] = (Geohash.neighbors(String(searchGeoHash.prefix(4)))?.sorted())!
self.db.collection(K.Firebase.clubCollection)
.whereField("clubActive", isEqualTo: true)
.whereField("clubGeoHash", isGreaterThanOrEqualTo: searchGeoBox[0])
.whereField("clubGeoHash", isLessThanOrEqualTo: searchGeoBox[7])
.addSnapshotListener querySnapshot, error in
guard let documents = querySnapshot?.documents else
print("Error fetching Club documents: \(error!)")
return
self.clubList.removeAll(keepingCapacity: false)
print("Club Count - from Firestore: ", documents.count)
for doc in documents
let mappedDoc = Club(dictionary: doc.data())
self.clubList.append(mappedDoc!)
self.clubListCount = self.clubList.count
print("Club Count - from Field: ", self.clubList.count)
这很有效,因为它显示了范围内的球杆。
我有另一个功能,允许用户更改他们的位置以搜索另一个位置的俱乐部。例如,我目前在波士顿,但我想搜索纽约的俱乐部。此函数更新 searchGeoHash 和 searchGeoBox
这个问题是我如何自动触发这个查询来更新,因为我已经改变了 searchGeoHash 和 searchGeoBox。
我必须重新运行查询还是以不同的方式使用 setup searchGeoHash 和 searchGeoBox?我应该使用 Observed 对象还是组合?
【问题讨论】:
我假设您只需要一个快照侦听器一次执行一个地理查询,对吧?换句话说,当用户改变位置时,该位置应该取代当前位置,是吗? 【参考方案1】:我如何自动触发此查询以进行更新,因为我有 更改了 searchGeoHash 和 searchGeoBox。
你可以使用didSet
:
@Published var searchGeoHash: String = Geohash.encode(...)
didSet
// trigger your query...
【讨论】:
以上是关于应用程序变量更改时触发 Firestore 查询的主要内容,如果未能解决你的问题,请参考以下文章
Cloud Firestore 中的每个数据更改都更新了局部变量