在Swift中将看起来像数组的变量转换为数据

时间:2018-10-02 17:26:25

标签: arrays swift nsdata uint

我想将(至少我认为)UInt8值数组转换为数据。

在此处无法使用数据(字节:变量)。

以下是变量的类型:

po type(of: obj.variable)   
(Swift.UInt8, Swift.UInt8, Swift.UInt8, Swift.UInt8)

这似乎不是UInt8的数组,但是它是什么类型的以及如何将其转换为数据?

谢谢!

1 个答案:

答案 0 :(得分:1)

obj的类型是四个UInt8值的元组。

您可以按如下方式访问元组的元素:

let obj: (UInt8, UInt8, UInt8, UInt8) = (2, 4, 6, 8) // let obj be a tuple of four UInt8 values
obj.0  // 2
obj.1  // 4

由于Data实际上是Collection个字节,因此可以从UInt8个值的序列中对其进行初始化。

最简单的解决方案是从元组的元素创建一个Array并从其中初始化一个Data值:

let data = Data([obj.0, obj.1, obj.2, obj.3])

但这不是最通用的解决方案,仅在元组仅包含UInt8值时有效。

更通用的方法是先将元组转换为UnsafePointer并从中创建一个Data值:

let data = withUnsafePointer(to: &obj) { ptr -> Data in
    return Data(bytes: ptr, count: MemoryLayout.size(ofValue: obj)
}