如何在 Swift 语言中使用 XMPPStream XMPP 框架发送图像?

Posted

技术标签:

【中文标题】如何在 Swift 语言中使用 XMPPStream XMPP 框架发送图像?【英文标题】:How to sent image using XMPPStream XMPP Framework in Swift Language? 【发布时间】:2016-09-03 10:11:09 【问题描述】:

我用过

pod 'XMPPFramework'

在我的演示项目中。我建立了联系,并适当地放置了委托方法。

我进行了简单的聊天,我正在使用

发送消息
 let msg = XMPPMessage(type: "chat", to: senderJID)
 msg.addBody(message)
 self.appDelegate.xmppStream.sendElement(msg)

在接收端,我正在做

func xmppStream(sender: XMPPStream!, didReceiveMessage message: XMPPMessage!) 

messageStr = messageStr + message.body()
print("Did receive message \(messageStr)")


现在我想发送图片。我在objective-c中浏览并找到了一些使用附件的代码,如下所示。

NSData *dataF = UIImagePNGRepresentation(SendImage);
         NSString *imgStr=[dataF base64Encoding];

         NSXMLElement *body = [NSXMLElement elementWithName:@"body"];
         [body setStringValue:messageStr];

         NSXMLElement *imgAttachement = [NSXMLElement elementWithName:@"attachment"];
         [imgAttachement setStringValue:imgStr];

         NSXMLElement *message = [NSXMLElement elementWithName:@"message"];
         [message addAttributeWithName:@"type" stringValue:@"chat"];
         [message addAttributeWithName:@"to" stringValue:chatWithUser];
         [message addChild:body];
         [message addChild:imgAttachement];      

         [self.xmppStream sendElement:message]; 

我的 Swift 代码,我从上面的 Objective-C 代码转换而来。

var dataF = UIImagePNGRepresentation(image)
        var imgStr = dataF.base64Encoding()

        let root = NSXMLElement(name: "find_sites")

        var body = NSXMLElement.elementWithName("body")
        body.stringValue = messageStr
        var imgAttachement = NSXMLElement.elementWithName("attachment")
        imgAttachement.stringValue = imgStr
        var message = NSXMLElement.elementWithName("message")
        message.addAttributeWithName("type", stringValue: "chat")
        message.addAttributeWithName("to", stringValue: senderJID)
        message.addChild(body)
        message.addChild(imgAttachement)
        self.xmppStream.sendElement(message)

如果我将此代码转换为 Swift,我在 NSXMLElement 上遇到错误,我应该怎么做,如何实现它。

我还阅读了XMPPStream class,我没有发现任何有用的东西。

谢谢。

【问题讨论】:

你遇到了什么错误? 使用未解析的标识符“NSXMLElement”。我还将代码更改为 Swift,让我也添加有问题的 swift 代码。 尝试使用XMPPMessage XMPPMessage 位于 XMPPFramework 的核心 我在简单的文本中使用 XMPPMessage,而对于图像,我在库中找不到任何方法。 【参考方案1】:

您可以使用 DDXMLElement 代替 NSXMLElement。

    let body = DDXMLElement.element(withName: "body") as! DDXMLElement
    let imageAttachement = DDXMLElement.element(withName: "attachment", stringValue: imageStr!) as! DDXMLElement

    let message = DDXMLElement.element(withName: "message") as! DDXMLElement
    message.addAttribute(withName: "type", stringValue: "chat")
    message.addAttribute(withName: "to", stringValue: receiver)
    message.addChild(body)
    message.addChild(imageAttachement)

【讨论】:

我已使用此代码发送图像,但如何读取 xmpp 数据?

以上是关于如何在 Swift 语言中使用 XMPPStream XMPP 框架发送图像?的主要内容,如果未能解决你的问题,请参考以下文章

打开pdf,ppt ..等文件时,如何使用swift语言在Xcode中添加关闭或后退按钮?

如何在iOS Swift 3中从键盘中删除更改语言键按钮

如何在 Swift 语言中获得一些整数的力量?

如何使用 swift 4.0 语言删除文件内容

Swift编程语言中如何实现自定义类型的for-in循环(基于Swift 2.2)

我可以在 xcode 的不同文件夹中使用相同的文件名以及如何在 ios Swift 语言中访问它