赞
踩
在重构公司项目的过程中发现 swift 开发自定义协议往往需要使用NSData转换后才能使用,考虑到重构的目标是尽量不使用oc的数据类型特别研究了一下。
在这里我们使用Swift的指针类型进行数据包的转换具体代码如下:
- func getPacket(pointer:UnsafeRawPointer,data:Data!,size:Int) -> Data? {
- //根据结构体构造Data数据
- var ahpack:Data = Data(bytes: pointer, count:size)
- //添加附加数据
- if data != nil{
- ahpack.append(data!)
- }
- return ahpack
- }
- //自定义协议包头
- struct Prototype {
- let param1:UInt16
- let param2:UInt16
- let param3:UInt16
- let param4:UInt16
- }
-
- //调用
- //构造包结构体
- var packetStruct = Prototype(param1: 1,param2: 2,param3: 3,param4: 4)
- //生成协议包
- print(getPacket(pointer: &packetStruct, data: nil, size: MemoryLayout.size(ofValue: packetStruct)))
-
- //从data转换结构体指针
- func getStruct(pointer:UnsafePointer<UInt8>)->UnsafePointer<Prototype>.Pointee{
-
- unsafeBitCast(pointer, to: UnsafePointer<Prototype>.self).pointee
- }
-
-
- //使用
- let structs = getStruct(pointer: &data)
- print("param1:\(structs.param1)\nparam2:\(structs.param2)\nparam3:\(structs.param3)\nparam4:\(structs.param4)")
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。