Чтобы заполнить массив из Firebase, нам нужно взять каждый узел драйвера, получить интересующие нас дочерние узлы, сгруппировать их и добавить в массив.
Для этого мы собираемсявозьмите представленный снимок, сопоставьте его со словарем и затем прочитайте дочерние узлы по их ключам.Затем используйте Структуру для хранения расстояния и имени драйвера в массиве.
Имейте в виду, что использование .childAdded будет повторять все существующие узлы один раз, а затем каждый раз вызывать код в закрытииДобавлен дочерний объект - вы можете захотеть прочитать узел один раз с помощью .value и вместо этого перебрать узлы в этом снимке (т.е. .observeSingleEvent (of: .value))
Вот очень подробный код для чтения вашегодрайверы и добавьте их, а также их расстояние от нашего текущего местоположения в массив.
Обратите внимание, что Firebase является асинхронным, поэтому обработку расстояний массива следует выполнять в замыкании, и любой код, следующий за этим кодом, будет выполняться раньшеэтот код завершен.
struct DriverAndDistance {
var driver = ""
var distance = 0.0
}
var driverArray = [DriverAndDistance]()
func readDriversAndAddObserver() {
let driversRef = self.ref.child("drivers")
driversRef.observe(.childAdded, with: { snapshot in
if snapshot.exists() == false { return }
let dict = snapshot.value as! [String: Any]
let firstName = dict["Firstname"] as! String
let long = dict["long"] as! Double
let lat = dict["lat"] as! Double
let distanceFromHere = self.getDistance(long, lat)
let dd = DriverAndDistance(driver: firstName, distance: distanceFromHere)
self.driverArray.append(dd)
//do calculations here and present data to user
})
}