【发布时间】:2015-12-12 22:40:52
【问题描述】:
我正在寻找在 Swift 中实现合理的 C 互操作性的最简单方法,而我当前的块是将 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) 可以加速循环本身,但这并不能消除循环本身的问题。
我知道this SO question 介绍了如何将UnsafePointer<Int8> 转换为String,但是String 与[T] 完全不同。是否有一种方便的 Swift 方法将长度字节从 UnsafePointer<T> 复制到 [T] 中?我更喜欢纯 Swift 方法,而不通过 NSData 或类似方法。如果上述算法真的是唯一的方法,我很乐意坚持下去。
【问题讨论】:
标签: c arrays swift unsafe-pointers