#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()
}
}