JSQMessagesViewController 7.3.4 Firebase (3.7.1) Наблюдаемые сообщения не могут получить доступ к FIRDataSnapshot

#ios #firebase #swift3 #jsqmessagesviewcontroller

#iOS #firebase #swift3 #jsqmessagesviewcontroller

Вопрос:

Я просто пытаюсь просмотреть JSQMessages с последними версиями и Swift 3.0, и следующий код — это то, что сообщается в любом другом вопросе по этому поводу, но по какой-то причине словарь, содержащийся в FIRDataSnapshot, возвращает ошибку компиляции «Тип ‘Any’ не имеет членов индекса.

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

Кто-нибудь сталкивался с такой же проблемой и преодолевал ее? Спасибо!

Комментарии:

1. Я нашел решение, не уверен, что оно лучшее, но оно работает:

Ответ №1:

Я предпочитаю придерживаться типов данных Firebase как можно дольше. В этом случае вы получаете значения с помощью:

 snapshot.childSnapshot(forPath: "text").value as! String
  

Итак:

 private func observeMessages() {
    let messagesQuery = messageRef.queryLimited(toLast: 25)

    messagesQuery.observe(.childAdded) { (snapshot: FIRDataSnapshot!) in
        let id = snapshot.childSnapshot(forPath: "name").value as! String
        let text = snapshot.childSnapshot(forPath: "text").value as! String
        self.addMessage(id: id, text: text)
        self.finishReceivingMessage()
    }
}
  

Комментарии:

1. Спасибо, это то, что я искал!

Ответ №2:

Я нашел решение, не уверен, что это лучший способ, в основном я принудительно привел к NSDictionary:

 private func observeMessages() {
        let messagesQuery = messageRef.queryLimited(toLast: 25)

        messagesQuery.observe(.childAdded) { (snapshot: FIRDataSnapshot!) in

            let id = (snapshot.value as! NSDictionary)["name"] as! String
            let text = (snapshot.value as! NSDictionary)["text"] as! String
            //let photoUrl = (snapshot.value as! NSDictionary)["photoUrl"] as! String

            self.addMessage(id: id, text: text)
            self.finishReceivingMessage()
        }
    }