迅速在不同的UnsafePointer <T>之间进行投射
我试图从swift使用C-Api。 举个例子,C-Api就是这样的:
void doThingsOnRawData(const unsigned char* data);
Swift将其转换为:
void doThingsOnRawData(UnsafePointer<UInt8>);
现在我想将一个NSData的数据传递给函数。 NSData.byte返回types:
UnsafePointer<()>
-
这是一种void *types吗?
-
至lessswift不会接受它作为
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))
你甚至可以省略通用types,因为它是从上下文中推断出来的:
doThingsOnRawData(UnsafePointer(data.bytes))
Swift 3的更新:从Xcode 8 beta 6开始,不能直接在不同的不安全指针之间进行转换。
对于data: NSData
, data.bytes
是一个UnsafeRawPointer
,可以使用UnsafeRawPointer
将其转换为UnsafePointer<UInt8>
:
doThingsOnRawData(data.bytes.assumingMemoryBound(to: UInt8.self))
对于data: Data
更简单:
data.withUnsafeBytes { doThingsOnRawData($0) }