我的工作使用一个JSQMessagesViewController消息传递应用程序,我想给另一个变量,一个整数相关联score
,其中每个消息(具有默认值,例如沿senderID
,text
和displayName
)。这就是我尝试实现的方法:
func addMessage(id: String, text: String, displayName: String, score: Int) {
// Make sure the character count is between 10 and 140, then add message to message list to display
if (text.characters.count <= 10 || text.characters.count >= 140) {
}
else {
let message = JSQMessage(senderId: id, displayName: displayName, text: text, score: score)
messages.append(message)
}
}
但是我收到以下错误消息:
Argument labels '(senderId:, displayName:, text:, score:)' do not match any available overloads
我只能假设这是因为有一些关于JSQMessage对象可以保存哪些数据的预设定义,我不确定如何覆盖它,以便可以将其他变量与消息关联。
注意:我试图直接更改JSQMessagesViewController框架本身中的代码(在JSQMessage.h
和JSQMessage.m
文件中)以添加一个额外的变量,但这只会导致更多错误,而且恐怕会搞砸了。
有什么办法吗?
提前致谢。
编辑
我想我想出了办法!
import UIKit
import JSQMessagesViewController
class CustomMessage: JSQMessage {
var score : Int
init(senderId:String, displayName:String, text:String, score:Int) {
self.score = score
super.init(senderId:senderId, displayName:displayName, text:text)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
但是我现在super.init
这样后得到一个错误:must call a designated initializer of the superclass 'JSQMessage'
只需对JSQMessage对象进行子类化,然后将额外的变量添加到子类化对象中即可。然后它将符合并具有所有相同的方法。
编辑:
看来我可能怀念您,文档指示您遵守JSQMessageData
协议。我是这样做的
class Message: NSObject, JSQMessageData {
var text_: String?
var senderId_: String?
var date_: NSDate?
var senderDisplayName_: String?
var isMediaMessage: Bool?
var score: Int? ***** Here is your new Variable
init(text: String?, senderId: String?, senderDisplayName: String?, score: Int?, date: NSDate) {
self.text_ = text
self.senderId_ = senderId
self.isOutBound_ = isOutBound
self.date_ = date
self.senderDisplayName_ = senderDisplayName
self.score_ = score *****
}
func text() -> String? {
return text_
}
func score() -> Int? { *****
return score_
}
func senderId() -> String? {
return senderId_
}
func date() -> NSDate? {
return date_
}
func senderDisplayName() -> String? {
return senderDisplayName_
}
func isMediaMessage() -> Bool {
return isMediaMessage_
}
func messageHash() -> UInt {
return UInt(self.hash)
}
}
您仍然可以用其他方式做到这一点,但是协议是可行的方式。
让我知道是否对您有所帮助:)但我会尽力澄清一下。祝好运
问题内容: 刚刚将项目转换为Swift 3,无法找出以下错误。 返回行显示错误“参数标签’(_ :)’与任何可用的重载都不匹配” 任何想法需要更改以解决此问题 问题答案: 您可以这样操作: 因为如果您检查,您将获得预定义的init,例如:
我正在用WebStorm做一个项目。昨天我安装了nvm&nodist来管理多个版本的Node。今天开始我的项目(在yarn start和npm start上)时,我遇到了这个错误。 抱歉,Nodist有问题。无法解析节点版本规范%s:%s 11.13.0找不到任何匹配的版本 我已经尝试修复重新安装的节点11版本,但错误仍然在这里。 有人能帮帮我吗?
问题内容: 我陷入了反应路由器路由。我收到错误消息: 这是我的 app.js : 我的 App.js 如下所示: 我的 Home.js 如下所示: 这是我的项目的层次结构: 如您所 料* ,我使用 browserify 构建 app.js 并创建 bundle.js, 并且在 index.html的 脚本标记中使用了 bundle.js * 这是我在项目中使用的所有版本。 因此,当我尝试转到“ h
问题内容: 有没有办法匹配以下示例例程的任何类参数? 无论传递到哪个类,如何 始终 返回a ?以下尝试仅适用于匹配的特定情况。 编辑 :一种解决方案是 问题答案: 还有两种方法(请参阅我对@Tomasz Nurkiewicz的先前回答的评论): 第一个依据的事实是编译器根本不会让您传递错误的类型: 您会丢失准确的输入(),但可能会按需要使用。 第二个涉及更多,但如果您 确实 要确保to的参数是的或
问题内容: 当我编译下面的Python代码时,我得到 与任何外部缩进级别都不匹配 为什么? 问题答案: 其他海报可能是正确的…选项卡中可能混有空格。尝试进行搜索和替换,以所有空格替换几个空格。 尝试这个:
我不明白为什么我会得到这样的错误:“prepared Statement中的变量数不匹配参数数”。 我的代码如下所示: