Я ищу простейшие способы достижения разумной совместимости С в Swift, и мой текущий блок преобразует UnsafePointer<Int8>
(который был const char *
) в массив [Int8]
.
В настоящее время у меня есть наивный алгоритм, который может принимать UnsafePointer
и количество байтов и преобразовывать его в массив, элемент за элементом:
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])
}
}
Сам цикл можно ускорить, используя arr.reserveCapacity(length)
, однако это не устраняет проблему самого цикла.
Я знаю этот вопрос SO, в котором описывается, как преобразовать UnsafePointer<Int8>
в String
, однако String
является другим зверьком целиком до [T]
. Есть ли удобный способ быстрого копирования байтов длины из UnsafePointer<T>
в [T]
? Я бы предпочел использовать чистые методы Swift, не проходя через NSData
или подобное. Если этот алгоритм действительно единственный способ сделать это, я с удовольствием придерживаюсь этого.