迅速在不同的UnsafePointer <T>之间进行投射

我试图从swift使用C-Api。 举个例子,C-Api就是这样的:

void doThingsOnRawData(const unsigned char* data); 

Swift将其转换为:

 void doThingsOnRawData(UnsafePointer<UInt8>); 

现在我想将一个NSData的数据传递给函数。 NSData.byte返回types:

 UnsafePointer<()> 
  1. 这是一种void *types吗?

  2. 至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: NSDatadata.bytes是一个UnsafeRawPointer ,可以使用UnsafeRawPointer将其转换为UnsafePointer<UInt8>

 doThingsOnRawData(data.bytes.assumingMemoryBound(to: UInt8.self)) 

对于data: Data更简单:

 data.withUnsafeBytes { doThingsOnRawData($0) }