繁体   English   中英

在不同的UnsafePointer之间进行转换 <T> 在迅速

[英]Casting between different UnsafePointer<T> in swift

我试图从快速使用C-Api。 作为一个例子,C-Api采用这种方式:

void doThingsOnRawData(const unsigned char* data);

Swift将其转换为:

void doThingsOnRawData(UnsafePointer<UInt8>);

现在我想将数据从NSData传递给函数。 NSData.byte返回类型:

UnsafePointer<()>
  1. 这是某种无效*类型吗?

  2. 至少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: NSDatadata.bytesUnsafeRawPointer可被转化到UnsafePointer<UInt8>assumingMemoryBound

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

对于data: Data甚至更简单:

data.withUnsafeBytes { doThingsOnRawData($0) }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM