【问题标题】:Swift override method didPressSendSwift 覆盖方法 didPressSend
【发布时间】:2016-11-27 22:37:04
【问题描述】:

我正在使用 Swift 3.0 和 Xcode 8.0 以及 JSQMessages 7.3.4。

我正在尝试实现 JSQMessagesViewController,具体来说,我正在尝试覆盖 didPressSend 函数,但它一直抱怨该方法没有覆盖其超类中的任何方法。

override func didPressSend(_ button: UIButton, withMessageText text: String, senderId: String, senderDisplayName: String, date: Date) {
    print("working")
}

你有什么想法吗?

它还抱怨方法不能是 @obj 覆盖,因为参数 5 的类型不能在 Objective-C 中表示。

【问题讨论】:

    标签: swift jsqmessagesviewcontroller


    【解决方案1】:
    override func didPressSend(_ button: UIButton?, withMessageText text: String?, senderId: String?, senderDisplayName: String?, date: Date?) {
        // Check to make sure we are sending something no need for blank messages.
        guard let text = text else {
            return
        }
        print("working")
        // add logic here.
    }
    

    在那里练习安全代码。

    【讨论】:

    • 嗨,Daniel,虽然我不得不删除了 conversation.smsNumber,但它仍然有效 - 那是什么?
    • 这只是我的变量。我的坏:)
    • 我用它来将我的消息发布到后端。因此,在我在此处添加添加逻辑的注释中,我有一个方法可以发布到后端并将消息添加到本地消息列表中。
    • 所以它只是我创建的具有 smsNumber 属性的对话对象。这样我就可以显示一个对话列表,一旦选择了整个聊天“对话”,它的所有消息都会显示出来。
    • 知道了!谢谢。
    【解决方案2】:

    您可以通过键入 override func didpress 然后接受建议的补全来纠正错误。在那里你会看到有一些细微的差别,最值得注意的是强制展开的选项:

    override func didPressSend(_ button: UIButton!, 
                   withMessageText text: String!, 
                               senderId: String!, 
                      senderDisplayName: String!, 
                                   date: Date!) {
        print("works")
    }
    

    【讨论】:

    • 嗨 Mundi,我做到了(使用自动完成并添加强制解包选项),但它仍然产生相同的错误。其他方法,如 didPressAccessoryButton 似乎还可以。关于为什么超类没有使用 didPressSend 方法的任何其他想法?
    猜你喜欢
    • 2016-11-07
    • 2017-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 2016-05-31
    • 2017-03-16
    相关资源
    最近更新 更多