Swift 2.2,Firebase,JSQMessagesViewController - 无法将类型 [JSQMessage] 的 return 表达式转换为类型 JSQMessageData
Swift 2.2, Firebase, JSQMessagesViewController - Cannot convert return expression of type [JSQMessage] to type JSQMessageData
我正在尝试制作一个聊天应用程序。我完成了登录和部分聊天界面,但是当我尝试使用函数 collectionView(collectionView: JSQMessagesCollectionView!,
messageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageData
配置聊天时,它给我错误 'Cannot convert return expression of type [JSQMessage] to type JSQMessageData!'
这是我的 MessagesViewController 代码:
import UIKit
import JSQMessagesViewController
import Firebase
class MessagesViewController: JSQMessagesViewController {
override func collectionView(collectionView: JSQMessagesCollectionView!,
messageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageData! {
return message[indexPath.item].userMessages
}
override func collectionView(collectionView: UICollectionView,
numberOfItemsInSection section: Int) -> Int {
return message.count
}
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.hidesBackButton = false
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
这是我的自定义 class 消息的代码:
import Foundation
import JSQMessagesViewController
import Firebase
class Messages {
dynamic var user = FIRAuth.auth()?.currentUser?.uid
dynamic var addedUsers = [String]()
dynamic var userMessages = [JSQMessage]()
dynamic var messageDates = [NSDate]()
}
消息数组为var message = [Messages]()
我的错误是什么,提前谢谢你。
问题是您正在尝试传递 JSQMessages
如果您使用 JSQMessages
而不是您的自定义 class Messages
就可以做到这一点,但是如果您有更多您想要在消息对象上跟踪的变量,那么您可能需要自定义实现。
全部 你需要让你的 Messages
class 符合 JSQMessageData
协议。 JSQMessages
已经符合这一点,这就是它们起作用的原因。我已经在之前的另一个 Whosebug 问题中概述了我是如何做到这一点的,如果您遇到困难,可以将其作为指南参考。
祝您好运,如果有更多我可以帮助您,请告诉我。
不好意思,我自己解决了。我试验了一下,发现必须要放'messages[indexPath.item].userMessages[index Path.item]'。我意识到我需要为函数提供每条消息而不是数组。感谢所有帮助!
我正在尝试制作一个聊天应用程序。我完成了登录和部分聊天界面,但是当我尝试使用函数 collectionView(collectionView: JSQMessagesCollectionView!,
messageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageData
配置聊天时,它给我错误 'Cannot convert return expression of type [JSQMessage] to type JSQMessageData!'
这是我的 MessagesViewController 代码:
import UIKit
import JSQMessagesViewController
import Firebase
class MessagesViewController: JSQMessagesViewController {
override func collectionView(collectionView: JSQMessagesCollectionView!,
messageDataForItemAtIndexPath indexPath: NSIndexPath!) -> JSQMessageData! {
return message[indexPath.item].userMessages
}
override func collectionView(collectionView: UICollectionView,
numberOfItemsInSection section: Int) -> Int {
return message.count
}
override func viewDidLoad() {
super.viewDidLoad()
self.navigationItem.hidesBackButton = false
// Do any additional setup after loading the view.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// Get the new view controller using segue.destinationViewController.
// Pass the selected object to the new view controller.
}
*/
}
这是我的自定义 class 消息的代码:
import Foundation
import JSQMessagesViewController
import Firebase
class Messages {
dynamic var user = FIRAuth.auth()?.currentUser?.uid
dynamic var addedUsers = [String]()
dynamic var userMessages = [JSQMessage]()
dynamic var messageDates = [NSDate]()
}
消息数组为var message = [Messages]()
我的错误是什么,提前谢谢你。
问题是您正在尝试传递 JSQMessages
如果您使用 JSQMessages
而不是您的自定义 class Messages
就可以做到这一点,但是如果您有更多您想要在消息对象上跟踪的变量,那么您可能需要自定义实现。
全部 你需要让你的 Messages
class 符合 JSQMessageData
协议。 JSQMessages
已经符合这一点,这就是它们起作用的原因。我已经在之前的另一个 Whosebug 问题中概述了我是如何做到这一点的,如果您遇到困难,可以将其作为指南参考。
祝您好运,如果有更多我可以帮助您,请告诉我。
不好意思,我自己解决了。我试验了一下,发现必须要放'messages[indexPath.item].userMessages[index Path.item]'。我意识到我需要为函数提供每条消息而不是数组。感谢所有帮助!