【发布时间】:2021-10-03 03:31:53
【问题描述】:
问题
如何使用最新的(swift 5)数据 API 将 Data() 对象转换为 Array 的 structs?
示例
在 Swift 5 之前,我有这段代码可以将 Data() 对象转换为 [Point] 数组
import Foundation
struct Point {
let x: Float
let y: Float
}
let pt1 = Point(x: 1, y: 1)
let pt2 = Point(x: 2, y: 2)
let points: [Point] = [pt1, pt2]
let pointData = Data(
bytes: points,
count: MemoryLayout<Point>.size * points.count
)
print(pointData.count)
var newPoints = [Point]()
// ** Deprecated **
pointData.withUnsafeBytes { (bytes: UnsafePointer<Point>) in
newPoints = Array(UnsafeBufferPointer(start: bytes, count: pointData.count / MemoryLayout<Point>.size))
}
print(newPoints.count) // 2
print(newPoints[0]) // Point(x: 1.0, y: 1.0)
print(newPoints[1]) // Point(x: 2.0, y: 2.0)
withUnsafeBytes 现已弃用:
withUnsafeBytes' 已弃用:改用
withUnsafeBytes<R>(_: (UnsafeRawBufferPointer) throws -> R) rethrows -> R
但我不知道如何使用新的数据 API 将我的 pointData 转换为 [Point] 数组。
这是一个类似的answer,它适用于单个对象,但我很难将它应用到我的数组示例中。
【问题讨论】: