我正在尝试使用 swift 中的 C-Api。例如,C-Api 是这样的:
void doThingsOnRawData(const unsigned char* data);
Swift 将其转换为:
void doThingsOnRawData(UnsafePointer<UInt8>);
现在我想将数据从 NSData 传递给函数。 NSData.byte 返回类型:
UnsafePointer<()>
这是某种 void* 类型吗?
至少 swift 不会接受它作为
UnsafePointer<UInt8>
.我该怎么做才能转换这个?
最佳答案
struct UnsafePointer<T>
有一个构造函数
/// Convert from a UnsafePointer of a different type.
///
/// This is a fundamentally unsafe conversion.
init<U>(_ from: UnsafePointer<U>)
你可以在这里使用
doThingsOnRawData(UnsafePointer<UInt8>(data.bytes))
您甚至可以省略泛型类型,因为它是从上下文中推断出来的:
doThingsOnRawData(UnsafePointer(data.bytes))
Swift 3 更新:从 Xcode 8 beta 6 开始,您无法转换 不再直接在不同的不安全指针之间。
对于 data: NSData
, data.bytes
是 UnsafeRawPointer
哪个行
转换为 UnsafePointer<UInt8>
与 assumingMemoryBound
:
doThingsOnRawData(data.bytes.assumingMemoryBound(to: UInt8.self))
对于 data: Data
它甚至更简单:
data.withUnsafeBytes { doThingsOnRawData($0) }
关于ios - swift 在不同的 UnsafePointer<T> 之间进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25359735/