Я работаю над курсом на Udemy, чтобы создать приложение для чата с Firebase, Backendless и Swift. Все проблемы (это было написано для Swift 2, а не 3). Я смог разрешить себя, но у меня все в тупике. Эта функция должна извлекать данные из базы данных Firebase и, по-видимому, она должна была получить ее как NSArray, но теперь она извлекает ее как NSDictionary, которая делает огромный список ошибок в других функциях, потому что она не ожидает Словарь.Извлечение и чтение данных как NSArray из Firebase (Swift 3)
func loadRecents() {
firebase.childByAppendingPath("Recent").queryOrderedByChild("userId").queryEqualToValue(currentUser.objectId).observeEventType(.Value, withBlock: {
snapshot in
self.recents.removeAll()
if snapshot.exists() {
let sorted = (snapshot.value.allValues as NSArray).sortedArrayUsingDescriptors([NSSortDescriptior(key: "date", ascending: false)])
}
})
}
Я обновил Свифта 3, насколько:
func loadRecents() {
ref = FIRDatabase.database().reference()
let userId = currentUser?.getProperty("username") as! String
ref.child("Recent").queryOrdered(byChild: "userId").queryEqual(toValue: userId).observe(.value, with: {
snapshot in
self.recents.removeAll()
if snapshot.exists() {
let values = snapshot.value as! NSDictionary
}
})
}
Конечно, используя as! NSArray
не работает. Был бы очень признателен, если кто-нибудь может предложить метод для обновления этого, чтобы использовать Swift 3, сортировать его по значению в данных и иметь доступ к нему позже. Благодаря!
Спасибо, это помогло, но я вижу, делать больше исследований, что я должен быть используя 'для дочернего элемента в snapshot.children { let myvalue = child.value [" my value "] as! String } 'или что-то подобное, чтобы прочесывать дочерние узлы. Однако, когда я это делаю, он говорит: «NSFastEnumerationIterator не имеет значения элемента», то он предлагает мне передать его AnyObject, но, конечно, это тоже не сработает. Вы знаете, как сделать эту работу? –
@EthanT сначала вы должны проверить тип возврата «child» в режиме отладки – ItsMeMihir