Как вернуть значение fireshot для дочернего снимка?
var test = String()
func fetchUser() {
let currentUserUid = Auth.auth().currentUser?.uid
Database.database().reference().child("users").child(currentUserUid!).child("test").observeSingleEvent(of: .value) { (snapshot) in
self.test = snapshot.value as! String
})
}
Я хочу добавить значение снимка к моей переменной.
Но это терпит крах, хотя моя концепция Firebase идеальна и соответствует коду.
Что может быть причиной?
Консольная структура:
- пользователи
- iBagi96IMGbd2k6wUtXjPs0gmNq1.<--- currentUserUid
- test: testValue
- iBagi96IMGbd2k6wUtXjPs0gmNq1.<--- currentUserUid
Ошибка, которую я получаю: Не удалось привести значение типа "NSNull" (0x10dd86de0) к "NSString" (0x10b2485d8).
Кроме того, я хотел бы добавить, что однажды я переименовал дочернее имя из "test" в sth else, и потом оно работало в течение короткого времени. Затем ошибка произошла снова.
1 ответ
В коде есть несколько опечаток в вопросе, но это вроде правильно.
Самая большая проблема заключается в обработке опций - они принудительно развернуты, когда вы должны рассматривать их как опциональные для защиты вашего кода.
так это
let currentUserUid = Auth.auth().currentUser?.uid
будет лучше как
guard let user = Auth.auth().currentUser else {return}
let uid = user.uid
Но работая с вашим кодом, вот обновление, которое считывает значение из этого узла в виде строки и выводит его на печать.
var test = String()
func readUserString() {
let currentUserUid = "iBagi96IMGbd2k6wUtXjPs0gmNq1"
let usersRef = self.ref.child("users")
usersRef.child(currentUserUid).child("test").observeSingleEvent(of: .value, with: { snapshot in
let test = snapshot.value as! String
print(test) //prints "testValue"
})
}