Извлекать строковое значение из моментального снимка firebase

#swift #firebase #firebase-realtime-database

#swift #firebase #firebase-база данных в реальном времени

Вопрос:

Я новый разработчик Swift. Я использую Swift 4.2 и Xcode 10.1.

Я пытаюсь создать массив строк из моментального снимка firebase. Я могу сделать это, настроив модель структуры и используя инициализатор, но когда я хочу сделать это непосредственно в коде без отдельной структуры, это не работает. Вот мой код:

     // Get the likers
    dbRef.child("likers").observeSingleEvent(of: .value) { snapshot in

        // Declare an array to hold the Likers
        var retrievedLikers = [String]()

        // Loop through the retrieved likers and put into the array
        for child in snapshot.children {
            let snap = child as! DataSnapshot
            let dict = snap.value as! [String:Any]
            let likerId = dict["userId"] as? String ?? ""
            print (likerId)
            retrievedLikers.insert(likerId, at: 0)
        }
            likers = retrievedLikers
        }
  

Моя модель данных firebase выглядит следующим образом:

введите описание изображения здесь

Я попробовал несколько методов. Приведенный выше код является самым последним, основанным на другом предложении SO.

Проблема в том, что я не могу создать словарь с помощью snap.value. Snap содержит правильные данные. Я получаю сообщение об ошибке «Не удалось преобразовать значение типа ‘__NSCFString’ в ‘NSDictionary’. Но привязка отображается как словарь. Вот скриншот:

введите описание изображения здесь

Будем признательны за любую помощь. Я пытался решить это в течение 3 часов.

Ответ №1:

Вы можете попробовать

 let res = snapshot.value as! [String:String] 
retrievedLikers = Array(res.values)
  

Здесь сбой snap.value — это String , который не может быть приведен к [String:Any]

 let dict = snap.value as! [String:Any]