JSQMessagesViewController 7.3.4 + Firebase (3.7.1) observeMessages 无法访问 FIRDataSnapshot
JSQMessagesViewController 7.3.4 + Firebase (3.7.1) observeMessages cannot access FIRDataSnapshot
我只是想观察最新版本和 Swift 3.0 的 JSQMessages,以下代码是关于此问题的任何其他问题中报告的内容,但出于某种原因,FIRDataSnapshot 中包含的字典返回编译错误“类型 'Any' 没有下标成员。
有没有人遇到同样的问题并解决了?谢谢!
我找到了解决方案,不确定这是不是最好的方法,基本上我强制转换为 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()
}
}
我更喜欢尽可能长时间地使用 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()
}
}
我只是想观察最新版本和 Swift 3.0 的 JSQMessages,以下代码是关于此问题的任何其他问题中报告的内容,但出于某种原因,FIRDataSnapshot 中包含的字典返回编译错误“类型 'Any' 没有下标成员。
有没有人遇到同样的问题并解决了?谢谢!
我找到了解决方案,不确定这是不是最好的方法,基本上我强制转换为 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()
}
}
我更喜欢尽可能长时间地使用 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()
}
}