如何在swift3中使用数据初始化结构变量

如何在swift3中使用数据初始化结构变量,swift3,Swift3,我有一个这样的结构 struct Str{ let item1: UINT16 let item2: UINT16 let item3: UINT32 } 我得到了一个结构变量mystr var mystr = Str(item1: 0x0101, item2: 0xffff, item3: 4) 我将结构变量存储到数据变量中 var myData = Data(bytes: &mystr, count:MemoryLayout<Str>.size) var my

我有一个这样的结构

struct Str{

let item1: UINT16
let item2: UINT16
let item3: UINT32

}

我得到了一个结构变量mystr

var mystr = Str(item1: 0x0101, item2: 0xffff, item3: 4)
我将结构变量存储到数据变量中

var myData = Data(bytes: &mystr, count:MemoryLayout<Str>.size)
var myData=Data(字节:&mystr,计数:MemoryLayout.size)
我的问题是如何使用数据变量初始化一个新的Str变量(将数据的值存储到struct中)


谢谢

作为一名专家,我还不足以说明将一些内存转储到
数据
对象,然后使用该内存初始化结构是多么危险,但以下是您可以做的:

let strFromData = myData.withUnsafeBytes { (p: UnsafePointer<Str>) -> Str in
    return p.pointee
}
我在以前的项目中所做的是逐个处理结构的成员:

extension Data
{
    mutating func append<T>(value: T)
    {
        var v = value
        self.append(UnsafeBufferPointer(start: &v, count: 1))
    }
}

var data = Data()
data.append(value: mystr.item1)
data.append(value: mystr.item2)
data.append(value: mystr.item3)
extension Data
{
    mutating func append<T>(value: T)
    {
        var v = value
        self.append(UnsafeBufferPointer(start: &v, count: 1))
    }
}

var data = Data()
data.append(value: mystr.item1)
data.append(value: mystr.item2)
data.append(value: mystr.item3)
let strFromData3 = myData.withUnsafeBytes { (p: UnsafePointer<UInt16>) -> Str in
    let item1 = p[0]
    let item2 = p[1]
    let p2 = UnsafeRawPointer(p).bindMemory(to: UInt32.self, capacity: 2)
    let item3 = p2[1]
    return Str(item1: item1, item2: item2, item3: item3)
}