Преобразовать переменную в массиве в данные в Swift - PullRequest
0 голосов
/ 02 октября 2018

Я хочу преобразовать (по крайней мере, мне кажется) массив значений UInt8 в Данные.

Использование данных (байты: переменная) здесь не работает.

Вот типпеременная:

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

Кажется, что это не массив UInt8, а какой это тип и как я могу преобразовать его в данные?

Спасибо!

1 Ответ

0 голосов
/ 02 октября 2018

Тип 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 value from it:

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)
}
...