如何通过 XMPPFramework 设置 XMPPMessage 的 delayedDeliveryDate 属性?

How to set the delayedDeliveryDate property of an XMPPMessage by XMPPFramework?

我正在根据 XMPPFramework 的 XEP-0313(消息存档管理)实施接收存档的 XMPP 消息。在我的 XMPPMessageArchiveManagementDelegate 中,我使用适当的委托方法一条一条地接收消息:

public func xmppMessageArchiveManagement(_ xmppMessageArchiveManagement: XMPPMessageArchiveManagement, didReceiveMAMMessage message: XMPPMessage) { }

在收到的 XMPP 消息中,我有一个 XML 元素用于消息本身,另一个 XML 元素用于延迟交付日期,我可以将其转换为时间戳:

guard let timestamp = delayElement.attribute(forName: "stamp") else { return }

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"

guard let delayedDeliveryDate = dateFormatter.date(from:timestamp.stringValue)

我还能够从消息 XMPP 元素成功创建 XMPPMessage 对象:

let xmppMessage = XMPPMessage(from: messageElement)

问题是我不明白如何将延迟交货日期设置到 XMPPMessage 对象。最后一个有一个 属性 delayedDeliveryDate,但我不能只设置它,因为它的只获取状态:

// xmppMessage.delayedDeliveryDate = delayedDeliveryDate
// It doesn't work because 'delayedDeliveryDate' is a get-only property

我试图找到一个可以将延迟交货日期传递给的初始化器,但我无法在 class XMPPMessage 的可用初始化器中找到这个参数,而且我不明白如何使用提供日期的可用参数,没有这些参数我将无法正确排序我的消息。

最后,我能够绕过设置 XMPPMessage 的 delayedDeliveryDate 属性 的必要性来解决我的问题。我只是为我的数据库消息对象设置了适当的 属性,这足以满足排序目的:

let dbMessage = DBMessage(xmppMessage: xmppMessage, date: delayedDeliveryDate)