Как создать базу данных Firebase - PullRequest
0 голосов
/ 26 октября 2018

Я хочу знать, как создать базу данных Firebase, чтобы я мог легко получить Данные о координатах.(Только начал использовать Firebase вчера, поэтому я очень новичок в этом деле)

ViewController

var reference: DatabaseReference!
var handle: DatabaseHandle?

viewDidLoad

reference = Database.database().reference()
handle = ref.child("Places/America/Capital/Washington/Coordinates").observe(.value, with: { (snapshot) in 
    for child in snapshot.children {
        let theSnap = child as! DataSnapshot
        let theValue = theSnap.value as! Double
        print(theValue)
    }

Это печатает координаты отлично.Но есть ли способ получить все координаты в моей базе данных?Я неправильно выкладываю базу данных или какой синтаксис я должен использовать, чтобы получить все данные, содержащие широту и долготу?

Изображение базы данных Firebase

enter image description here

edit 1 Нет ли простого способа сделать цикл for-in вместо простого копирования строки ручки и изменениянеобходимый путь к файлу?

1 Ответ

0 голосов
/ 26 октября 2018

Ты так близко.

Указанный вами путь (ссылка на 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...