Ты так близко.
Указанный вами путь (ссылка на Firebase) предназначен для определенного набора координат в координатном узле. Затем вы перебираете два дочерних узла в Координатах, которые выводят дочерние узлы широты и долготы.
Если вы хотите получить координаты для всех, вам нужно подняться на несколько уровней и использовать ту же технику для итерации по дочерним узлам.
Поначалу немного сложно обернуть твой мозг, поэтому позволь мне поднять тебе ногу. Вот полный код и вывод. Обратите внимание, что я сохранил координаты как int, так что настройте соответственно. Я бы, вероятно, предложил хранить их как строки.
let placesRef = self.ref.child("Places")
placesRef.observeSingleEvent(of: .value, with: { snapshot in
for countryChild in snapshot.children { //iterate over each country
let countryChildSnap = countryChild as! DataSnapshot //cast the child to a snapshot
let countryName = countryChildSnap.key //get it's key, the country name
print("country: \(countryName)")
let capitalSnap = countryChildSnap.childSnapshot(forPath: "Capital") //get the nodes within the capital node
for stateChild in capitalSnap.children { //iterate over each state within the country
let stateChildSnap = stateChild as! DataSnapshot
let stateName = stateChildSnap.key
print(" state: \(stateName)")
let coordsSnap = stateChildSnap.childSnapshot(forPath: "Coordinates")
let lat = coordsSnap.childSnapshot(forPath: "latitude").value as! Int
let lon = coordsSnap.childSnapshot(forPath: "longitude").value as! Int
print(" latitude: \(lat) longitude: \(lon)")
}
}
})
и вывод
country: America
state: Washington
latitude: 38 longitude: -77
country: France
state: Paris
latitude: 48 longitude: 2
country: Germany
state: Berlin
latitude: 52 longitude: 13
Обратите внимание, что я хочу прочитать это только один раз, поэтому я использую .observeSingleEvent. Если вы хотите получать уведомления о будущих изменениях, используйте .observe с .childAdded, .childChanged и .childRemoved.