Это очень широкий вопрос, потому что он охватывает множество различных аспектов работы с Firebase;написание, чтение, обработка DataSnapshots и т. д. Кроме того, я не знаю, что представляют ваши данные, поэтому я выбрал кое-что для себя, чтобы охватить некоторые аспекты работы с Firebase.
Там нет проверки ошибок, но она работает какявляется.Я прокомментировал по пути.
У Firebase нет объектов;просто родительский и дочерний узлы.Все можно рассматривать как пары ключ: значение, как словарь.Вы не можете написать объект или прочитать объект.Только NSString, NSNumber, NSDictionary и страшный NSArray (или их аналоги Swift)
Давайте начнем с класса - есть 100 способов сделать это, но мне нравится, когда классы отвечают за свои свойства, а также принимают их ипредставив их
class WineClass {
var wine_key = ""
var name = ""
var varietal = ""
//this is used when creating a new wine object before storing in firebase
init(withName: String, andVarietal: String) {
self.name = withName
self.varietal = andVarietal
}
//this is used when we are loading data from firebase to create the wineclass object
init(withSnapshot: DataSnapshot) {
let wineName = withSnapshot.childSnapshot(forPath: "wine_name").value as? String ?? "No Wine Name"
let wineDict = withSnapshot.value as! [String: Any]
let wineVarietal = wineDict["wine_varietal"] as? String ?? "No Wine Varietal"
self.wine_key = withSnapshot.key //when we read a wine, this will be it's reference in case we want to update or delete it
self.name = wineName
self.varietal = wineVarietal
}
//this is use to create a dictionary of key:value pairs to be written to firebase
func getWineDictForFirebase() -> [String: Any] {
let d = [
"wine_name": self.name,
"wine_varietal": self.varietal
]
return d
}
}
Затем нам нужен класс var для хранения WineClass's.Это может быть, например, источник данных для tableView
var wineArray = [WineClass]() //a class var array to store my wines
Затем я дам вам две кнопки: одну, которая заполняет и записывает немного вина в Firebase, а затем вторую, которая читает их и выводит на консоль * 1013.*
func button0() {
self.writeWine(withName: "Scarecrow", andVarietal: "Red Blend")
self.writeWine(withName: "Ghost Horse", andVarietal: "Cabernet Sauvignon")
self.writeWine(withName: "Screaming Eagle", andVarietal: "Cabernet Sauvignon, Merlot, Cabernet Franc")
}
func button1() {
self.readWines()
}
И затем функция, которая принимает некоторые строки как свойства для каждого вина и записывает их в Firebase
func writeWine(withName: String, andVarietal: String) {
let newWine = WineClass(withName: withName, andVarietal: andVarietal) //create a new wine object
let wineListRef = self.ref.child("wine_list") //get a reference to my firebase wine_list
let thisWineRef = wineListRef.childByAutoId() //a new node for this wine
let d = newWine.getWineDictForFirebase() //get the wine properties as a dictionary
thisWineRef.setValue(d) //save it in firebase
}
и, наконец, функцию, которая читает эти вина и печатает их свойства в консоли
func readWines() {
let wineRef = self.ref.child("wine_list")
wineRef.observeSingleEvent(of: .value, with: { snapshot in //we are reading in the entire wine node which will contain many child nodes
let allWines = snapshot.children.allObjects as! [DataSnapshot] //cast each child node as a DataSnapshot & store in array
for wineSnap in allWines { //iterate over each child node in the array
let wine = WineClass(withSnapshot: wineSnap) //create a new wine, ensuring we also keep track of it's key
self.wineArray.append(wine) //add to the array
}
for wine in self.wineArray {
print(wine.wine_key, wine.name, wine.varietal)
}
})
}
и, наконец, при нажатии кнопки 0 наша Firebase выглядит следующим образом
wine_list
-LhbjhkEC8o9TUISCjdw
wine_name: "Scarecrow"
wine_varietal: "Red Blend"
-LhbjhkEC8o9TUISCjdx
wine_name: "Ghost Horse"
wine_varietal: "Cabernet Sauvignon"
-LhbjhkEC8o9TUISCjdy
wine_name: "Screaming Eagle"
wine_varietal: "Cabernet Sauvignon, Merlot, Cabernet Franc"
, а затем вывод при нажатии кнопки 1
-LhbjhkEC8o9TUISCjdw Scarecrow Red Blend
-LhbjhkEC8o9TUISCjdx Ghost Horse Cabernet Sauvignon
-LhbjhkEC8o9TUISCjdy Screaming Eagle Cabernet Sauvignon, Merlot, Cabernet Franc
Обратите внимание, что само.ref - это ссылка на корневой узел моей базы Firebase , ваша ссылка должна ссылаться на вашу базу FireBase.