Convertir un puntero inseguro con longitud a un tipo de matriz rápida
Estoy buscando las formas más simples de lograr una interoperabilidad C razonable en Swift, y mi bloque actual está convirtiendo unUnsafePointer<Int8>
(que era unconst char *
), en una[Int8]
formación.
Actualmente, tengo un algoritmo ingenuo que puede tomar unUnsafePointer
y una cantidad de bytes y lo convierte en una matriz, elemento por elemento:
func convert(length: Int, data: UnsafePointer<Int8>) {
let buffer = UnsafeBufferPointer(start: data, count: length);
var arr: [Int8] = [Int8]()
for (var i = 0; i < length; i++) {
arr.append(buffer[i])
}
}
El bucle en sí se puede acelerar usandoarr.reserveCapacity(length)
, sin embargo, eso no elimina el problema del bucle en sí.
Soy consciente deesta pregunta SO que cubre cómo convertirUnsafePointer<Int8>
aString
, sin embargoString
es una bestia completamente diferente a[T]
. ¿Existe una manera conveniente y rápida de copiar bytes de longitud desde unUnsafePointer<T>
en una[T]
? Prefiero métodos puros de Swift, sin pasar porNSData
o similar. Si el algoritmo anterior es realmente la única forma de hacerlo, estoy feliz de seguir con eso.