Данные не извлекаются из базы данных Firebase Swift 4 - PullRequest
0 голосов
/ 05 ноября 2018

Я просто пытаюсь показать, как далеко пользователь находится от местоположения, но мне кажется, что я ничего не могу напечатать на моей консоли. Если я помещу код в viewDidLoad и вручную введу координаты для "postLocations" Я получил расстояние, но, похоже, ничего не напечатал с кодом, который у меня есть на данный момент.

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    let userLocation: CLLocation = locations[0] as CLLocation

    let ref = Database.database().reference().child("posts")
    ref.observeSingleEvent(of: .value, with: { (snapshot) in

        guard let dictionary = snapshot.value as? [String: AnyObject] else { return }

        guard let latitude = dictionary["latitude"] as? Double else { return }
        guard let longitude = dictionary["longitude"] as? Double else { return }

        let currentLocation = Coordinate(long: userLocation.coordinate.longitude, lat: userLocation.coordinate.latitude)
        let postLocations = Coordinate(long: longitude, lat: latitude)

        if currentLocation.distance(to: postLocations) <= 100 {
            print("You are \(currentLocation.distance(to: postLocations)) away from posts")
        } else {
            print("No posts in area")
        }

    }) { (error) in
        print("There was an error getting posts", error)
    }

    }

Firebase Database

Ответы [ 3 ]

0 голосов
/ 05 ноября 2018

Попробуйте этот код в viewDidLoad и проверьте оператор печати в консоли, печатается ли широта и долгота.

func fetchUserLocation() {
     let ref = Database.database().reference().child("posts")
     ref.observeSingleEvent(of: .value, with: { (snapshot) in
     guard let dictionary = snapshot.value as? [String: AnyObject] else { return }
     guard let latitude = dictionary["latitude"] as? String else { return }
     guard let longitude = dictionary["longitude"] as? String else { return }
     print("lat: \(latitude), lon: \(longitude)")
   }) { (error) in
    print("There was an error getting posts", error)
  }
}
0 голосов
/ 05 ноября 2018

Вкл. viewDidLoad() попробуйте получить доступ к базе данных Firebase, позвонив по этому номеру:

func getFirebaseUserLocation() {
    let ref = Database.reference(withPath: "posts")
    ref.observe(.value, with: { (snapshot) in
        for child in snapshot.children {
            if let postSnapshots = child as? DataSnapshot  { 
                for postSnapshot in postSnapshots.children {
                    guard let postDictionary = postSnapshot.value as? [String: Any] else { return }
                    guard let latitude = postDictionary["latitude"] as? String, let longitude = postDictionary["longitude"] as? String else { return } 
                    print(latitude, longitude)
                    // here you can access your latitude and longitude as Strings from Firebase Database
                }
            }
        }
    }
}
0 голосов
/ 05 ноября 2018

Вам не нужно вызывать наблюдателя Firebase в didUpdateLocations. Вы должны вызвать наблюдателя Firebase в viewDidLoad, чтобы вы могли получить местоположение пользователя из базы данных Firebase. После того, как наблюдатель наблюдает за местоположением пользователя, вам нужно выбрать текущее местоположение, чтобы вы могли сравнить 2 местоположения. Просто попробуйте это.

...