You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS Swift使用MessageKit调用delegate和DataSource提示messagesCollectionView不在作用域

错误原因

你当前的ChatDashboard继承的是系统原生UIViewController,本身不包含messagesCollectionView这个内置属性,该属性是MessageKit框架中MessagesViewController的专属自带成员,因此编译器会报变量找不到的作用域错误。

修复步骤
  • 修改ChatDashboard的父类继承关系,将父类从UIViewController替换为MessagesViewController,修改后的类定义代码如下:
class ChatDashboard: MessagesViewController {
    // 原有类内代码保持不变
    @IBOutlet weak var lblUser: UILabel!
    var userActive: String? = nil

    override func viewDidLoad() {
        super.viewDidLoad()
        // 这里调用messagesCollectionView就不会报错了
        messagesCollectionView.messagesDataSource = self
        messagesCollectionView.messagesLayoutDelegate = self
        messagesCollectionView.messagesDisplayDelegate = self
        if let userData = userActive {
            self.lblUser.text = userData
        }
    }
}
  • 修正自定义Sender结构体的命名规范,Swift要求类型名首字母大写,避免后续出现类型识别异常:
struct Sender: SenderType {
    var photo: String
    var senderId: String
    var displayName: String
}
  • 扩展ChatDashboard遵守三个代理协议,实现必填代理方法,参考代码如下:
extension ChatDashboard: MessagesDataSource, MessagesLayoutDelegate, MessagesDisplayDelegate {
    // 必填:返回当前登录的消息发送方
    var currentSender: SenderType {
        // 替换为你自己构造的当前用户Sender实例
        return Sender(photo: "", senderId: Auth.auth().currentUser?.uid ?? "", displayName: "")
    }
    
    // 必填:返回消息总条数
    func numberOfSections(in messagesCollectionView: MessagesCollectionView) -> Int {
        // 替换为你的消息数组的count值
        return 0
    }
    
    // 必填:返回对应索引位置的消息实例
    func messageForItem(at indexPath: IndexPath, in messagesCollectionView: MessagesCollectionView) -> MessageType {
        // 替换为你的消息数组[indexPath.section]
        return Message(sender: currentSender, messageId: UUID().uuidString, sentDate: Date(), kind: .text("测试消息"))
    }
}
  • 如果你使用Storyboard搭建页面,需要将对应页面的自定义类设置为ChatDashboard,同时确保父类匹配为MessagesViewController。

内容的提问来源于stack exchange,提问作者King faheem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 03:27:03