[英]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<()>
这是某种无效*类型吗?
至少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) }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.