Swift结构到NSData并返回

Swift结构到NSData并返回,第1张

概述我有一个包含一个struct和一个NSObject的结构体,我想序列化成一个NSData对象: struct Packet { var name: String var index: Int var numberOfPackets: Int var data: NSData}var thePacket = Packet(name: name, index: i, number 我有一个包含一个struct和一个NSObject的结构体,我想序列化成一个NSData对象:
struct Packet {  var name: String  var index: Int  var numberOfPackets: Int  var data: NSData}var thePacket = Packet(name: name,index: i,numberOfPackets: numberOfPackets,data: packetData)@H_403_2@  

如何最好地将该Patch序列化为NSData,如何最佳地将其排序?

运用

var bufferData = NSData(bytes: & thePacket,length: sizeof(Packet))@H_403_2@  

只给我一个名字和数据的指针.我正在探索NSKeyedArchiver,但是我必须使Packet成为一个对象,我更希望保留一个结构体.

干杯

没有得到任何反馈,这是我结束的解决方案:

>为我的结构生成encode()和decode()函数
>将Int更改为Int64,因此Int在32位和64位平台上具有相同的大小
有一个没有String或Data的中间结构(ArchivedPacket),只有Int64

这是我的代码,我将非常感谢您的反馈,特别是如果有更少的麻烦的方式来做到这一点:

public struct Packet {    var name: String    var index: Int64    var numberOfPackets: Int64    var data: NSData    struct ArchivedPacket {        var index : Int64        var numberOfPackets : Int64        var nameLength : Int64        var dataLength : Int64    }    func archive() -> NSData {        var archivedPacket = ArchivedPacket(index: Int64(self.index),numberOfPackets: Int64(self.numberOfPackets),nameLength: Int64(self.name.lengthOfBytesUsingEnCoding(NSUTF8StringEnCoding)),dataLength: Int64(self.data.length))        var Metadata = NSData(            bytes: &archivedPacket,length: sizeof(ArchivedPacket)        )        let archivedData = NSMutableData(data: Metadata)        archivedData.appendData(name.dataUsingEnCoding(NSUTF8StringEnCoding,allowLossyConversion: false)!)        archivedData.appendData(data)        return archivedData    }    func unarchive(data: NSData!) -> Packet {        var archivedPacket = ArchivedPacket(index: 0,numberOfPackets: 0,nameLength: 0,dataLength: 0)        let archivedStructLength = sizeof(ArchivedPacket)        let archivedData = data.subdataWithRange(NSMakeRange(0,archivedStructLength))        archivedData.getBytes(&archivedPacket)        let nameRange = NSMakeRange(archivedStructLength,Int(archivedPacket.nameLength))        let datarange = NSMakeRange(archivedStructLength + Int(archivedPacket.nameLength),Int(archivedPacket.dataLength))        let nameData = data.subdataWithRange(nameRange)        let name = Nsstring(data: nameData,enCoding: NSUTF8StringEnCoding) as! String        let theData = data.subdataWithRange(datarange)        let packet = Packet(name: name,index: archivedPacket.index,numberOfPackets: archivedPacket.numberOfPackets,data: theData)        return packet    }}@H_403_2@          总结       

以上是内存溢出为你收集整理的Swift结构到NSData并返回全部内容,希望文章能够帮你解决Swift结构到NSData并返回所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1038907.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存