#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]