ios - 线程 1:致命错误:NSArray 元素无法匹配 Swift Array 元素类型
问题描述
我有我的 Messages 自定义类,声明如下:
class Message: SBDBaseMessage {
var text : String?
var date: Date?
init(text: String, date: Date) {
super.init()
self.text = text
self.date = date
}
}
注意:SBDBaseMessage
是自定义消息类型的SendBird
消息传递框架。
然后,我有一个像这样声明的空数组:
var messages: [Message] = [Message]()
在下面的代码块中,我收到了这个崩溃消息(在第二行)->
线程 1:致命错误:NSArray 元素无法匹配 Swift Array 元素类型
这是代码:
func sendMessage() {
if let channel = self.groupChannel {
channel.sendUserMessage(textView.text) { (message, error) in
guard error == nil else { return }
let newMessage: Message = Message(text: (message?.message)!, date: Date())
self.messages.append(newMessage)
self.tableView.reloadData()
}
}
}
这里的消息是SBDUserMessage
继承自SBDBaseMessage
.
我究竟做错了什么?任何帮助将不胜感激
解决方案
好的,我找到了这个错误的原因。我的messages
数组被附加到另一个代码块中SBDUserMessages
,并且我没有将它们转换为确切类型的消息 ( as! SBDUserMessage
)。
调试确实有很大帮助。在某个时候,我决定在self.messages.append(newMessage)
(实际发生崩溃的地方)之前调用 messaged.removeAll(),然后我发现一切正常。
推荐阅读
- ruby-on-rails-5 - Rails 传递对象以形成局部
- bash - Git自动完成行为奇怪
- c++ - C++ Find 用于构建单行计算器
- python - Django:无法在模板中添加可点击链接
- python - Python中的返回值作业
- flutter - Flutter Dropdown 在屏幕中间居中并且只显示几个项目?
- php - 如何使用 PHP 文件显示 mysql 数据库中的数据?
- discord.js - discord.js 在捕获承诺错误后返回?
- vue.js - 如何继承 vue.js json(文件名)
- c# - C# 使用 Net Standard 2.0 库发布到 nuget 时保留 [Serializable] 属性