Как получить данные о ближайших фидах из GeoFire на Firebase 5, Swift 4.2? - PullRequest
0 голосов
/ 24 января 2019

Я новичок в GeoFire. Я хотел бы получить некоторые отзывы при получении ближайших постов. Мои вопросы: 1) Строка базы данных Geofire имеет опционально (""). Это причина, по которой я не могу получить свой пост, так как есть дополнительная строка, такая как «Необязательно (»)? Если это так, есть ли способ его удалить?

2) Что за строка в g: что-то, что я должен включить в свой почтовый узел?

3) Я не могу получить сообщения из следующего кода. «print (self.keyArray.count)» и «print (distance as Any)» работают нормально. Тем не менее, он показывает «null», когда я пытаюсь напечатать snapshot.value после «POSTS_REF ....». Может ли кто-нибудь предложить мне метод извлечения ближайших сообщений?

Мой узел Geofire на Firebase выглядит следующим образом: enter image description here String in Optional ("") - мой postId. Моя логика в соседнем посте: 1, определить мое текущее местоположение:

func determineMyCurrentLocation() {
    locationManager.startUpdatingLocation()
}

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    locationManager.stopUpdatingLocation()
    if(currLocation == nil)
    {
        currLocation = locations.last
        self.fetchNearbyPost()
    }
    else{
        print("trying to update")
    }
}

2, я получаю следующие сообщения:

func fetchNearbyPost() {
    self.posts.removeAll()
    self.keyArray.removeAll()
    circleQuery = geoFire.query(at: currLocation, withRadius: 1000)
    var distanceArray = [Double]()
    circleQuery.observe(.keyEntered) { (key: String!, location: CLLocation!) in
        self.keyArray.append(key)
    }
    self.dispatchGroup.enter()
    circleQuery.observeReady {
        if(self.keyArray.count > 0)
        {
            for index in 0...self.keyArray.count-1{
                self.geoFire.getLocationForKey(self.keyArray[index], withCallback: { (keyLocation, error) in
                    print(self.keyArray.count)

                    let distance = keyLocation?.distance(from: self.currLocation)
                    distanceArray.append(distance!)
                    print(distance as Any)
                })
                POSTS_REF.child(self.keyArray[index]).observeSingleEvent(of: .value, with: { (snapshot) in
                    var post = Post(snapshot: snapshot)
                    post.distance = distanceArray[index]
                    self.posts.append(post)
                    if(self.keyArray.count == self.posts.count)
                    {
                        self.dispatchGroup.leave()
                    }
                    })
                })
            }
        }
        else
        {
            self.dispatchGroup.leave()
        }
    }

    dispatchGroup.notify(queue: .main) {
        self.posts = self.posts.sorted(by: { $0.distance < $1.distance })
        self.collectionView.reloadData()
        self.currLocation = nil
    }
}
...