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.

Respuestas a la pregunta(2)

Su respuesta a la pregunta