我正在寻找在 Swift 中实现合理的 C 互操作性的最简单方法,而我当前的块正在将 a UnsafePointer<Int8>
(它是 a 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 question涵盖了如何转换UnsafePointer<Int8>
为String
,但是String
完全不同于[T]
. 是否有一种方便的 Swift 方法将长度字节从 a 复制UnsafePointer<T>
到 a 中[T]
?我更喜欢纯 Swift 方法,而不是通过NSData
或类似的方法。如果上述算法真的是唯一的方法,我很乐意坚持下去。