Arrays 如何使用Swift使用Firebase GeoFire查询多个密钥?

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

我有一个GeoFire查询,它正在返回用户id或
键。我按顺序返回
,但我得到了几个序列。如何获取上次更新的序列

@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()
        })