我沒有足夠的專家來告訴多麼危險只是傾銷一些內存爲Data
對象,然後使用內存來初始化一個結構的,但這裏是你可以做什麼:
let strFromData = myData.withUnsafeBytes { (p: UnsafePointer<Str>) -> Str in
return p.pointee
}
或者更短:
let strFromData2 = myData.withUnsafeBytes { $0.pointee as Str }
我在以前的工程中的已經做了TS是處理一個結構的成員一個接一個:
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)
}
:
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)
使用Str
的初始化建立從myData
一個Str
來源
2017-03-16 17:06:32
thm