我试图从快速使用C-Api.作为一个例子,C-Api采用这种方式:
void doThingsOnRawData(const unsigned char* data);
Run Code Online (Sandbox Code Playgroud)
Swift将其转换为:
void doThingsOnRawData(UnsafePointer<UInt8>);
Run Code Online (Sandbox Code Playgroud)
现在我想将数据从NSData传递给函数.NSData.byte返回类型:
UnsafePointer<()>
Run Code Online (Sandbox Code Playgroud)
这是某种无效*类型吗?
至少swift不接受它作为一个UnsafePointer<UInt8>.我该怎么办呢?
Mar*_*n R 36
struct UnsafePointer<T> 有一个构造函数
/// Convert from a UnsafePointer of a different type.
///
/// This is a fundamentally unsafe conversion.
init<U>(_ from: UnsafePointer<U>)
Run Code Online (Sandbox Code Playgroud)
你可以在这里使用
doThingsOnRawData(UnsafePointer<UInt8>(data.bytes))
Run Code Online (Sandbox Code Playgroud)
您甚至可以省略泛型类型,因为它是从上下文中推断出来的:
doThingsOnRawData(UnsafePointer(data.bytes))
Run Code Online (Sandbox Code Playgroud)
Swift 3的更新:从Xcode 8 beta 6开始,你不能再直接在不同的不安全指针之间进行转换.
为data: NSData,data.bytes是一种UnsafeRawPointer可被转化到UnsafePointer<UInt8>与assumingMemoryBound:
doThingsOnRawData(data.bytes.assumingMemoryBound(to: UInt8.self))
Run Code Online (Sandbox Code Playgroud)
因为data: Data它更简单:
data.withUnsafeBytes { doThingsOnRawData($0) }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12648 次 |
| 最近记录: |