Как вернуть значение 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

Ошибка, которую я получаю: Не удалось привести значение типа "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"
    })
}
Другие вопросы по тегам