【问题标题】:Convert Array-looking variable to Data in Swift在 Swift 中将看起来像数组的变量转换为数据
【发布时间】:2018-10-02 17:26:25
【问题描述】:

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

在这里使用数据(字节:变量)不起作用。

这是变量的类型:

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

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

谢谢!

【问题讨论】:

  • 看起来像一个有 4 个 UInt8 值的元组。
  • 太棒了!确实。谢谢!

标签: arrays swift nsdata uint


【解决方案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)
}

【讨论】:

    猜你喜欢
    • 2018-04-08
    • 2014-03-14
    • 2022-10-22
    • 2020-12-04
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 2021-05-11
    • 1970-01-01
    相关资源
    最近更新 更多