Arrays 如何使用Swift使用Firebase GeoFire查询多个密钥?
我有一个GeoFire查询,它正在返回用户id或Arrays 如何使用Swift使用Firebase GeoFire查询多个密钥?,arrays,swift,firebase,firebase-realtime-database,geofire,Arrays,Swift,Firebase,Firebase Realtime Database,Geofire,我有一个GeoFire查询,它正在返回用户id或键。我按顺序返回键,但我得到了几个序列。如何获取上次更新的序列 @IBAction func friendsNearMeACTN(sender: AnyObject) { let geofireRef = self.ref.child("UserLocations") let geoFire = GeoFire(firebaseRef: geofireRef) let circleQuery
键。我按顺序返回键
,但我得到了几个序列。如何获取上次更新的序列
@IBAction func friendsNearMeACTN(sender: AnyObject)
{
let geofireRef = self.ref.child("UserLocations")
let geoFire = GeoFire(firebaseRef: geofireRef)
let circleQuery = geoFire.queryAtLocation(self.location, withRadius: 20.6)
circleQuery.observeEventType(.KeyEntered, withBlock: { (key: String!, location: CLLocation!) in
self.localUsers.append(key)
self.getLocalUsers()
})
}
func getLocalUsers()
{
print(self.localUsers)
}
这就是我从func getLocalUsers()
得到的信息
["WGueYzDjH4NW2vneHOyGmjf6PYB3"]
["WGueYzDjH4NW2vneHOyGmjf6PYB3", "Cg4pQj36ttNUuWNqtc16tIFmI0A2"]
["WGueYzDjH4NW2vneHOyGmjf6PYB3", "Cg4pQj36ttNUuWNqtc16tIFmI0A2", "N5pgqGEhW2f7PGGVmB3AQ8v1uPk2"]
如何简单地获取最后一个数组?这里的问题是,每次触发观察程序块时,您都在调用getLocalUsers func。你在为每一个结果呼唤它。每次执行观察者块时,需要对结果进行计数,并将计数加1。当计数达到结果计数时,调用getLocalUsers函数一次,而不是三次。请尝试下面的代码。我还没有测试过
@IBAction func friendsNearMeACTN(sender: AnyObject){
var i = 0//The counter
let geofireRef = self.ref.child("UserLocations")
let geoFire = GeoFire(firebaseRef: geofireRef)
let circleQuery = geoFire.queryAtLocation(self.location, withRadius: 20.6)
circleQuery.observeEventType(.KeyEntered, withBlock: { (key: String!, location: CLLocation!) in
self.localUsers.append(key)
i += 1//Add one to i every time observer fires
if i == self.key.count {//if counter (i) is equal to the keys returned call getLocalUsers func once
self.getLocalUsers()
}
})
}
func getLocalUsers(){
print(self.localUsers)
}
答案是GeoFire查询是一个连续的异步调用,只需要最后的代码observerreadyWithBlock
为self.localUsers()
提供收集的信息。下面是一个例子
let regionQuery = geoFire.queryWithRegion(self.region)
regionQuery.observeEventType(.KeyEntered, withBlock: { (key: String!, location: CLLocation!) in
var users = [String]()
users.append(key)
for keys in users
{
let user = keys
allKeys.append(user)
}
self.localUsers = allKeys
self.getLocalUsers()
})
regionQuery.observeReadyWithBlock({ () -> Void in
self.getLocalUsers()
})