gpt4 book ai didi

ios - swift 在不同的 UnsafePointer 之间进行转换

转载 作者:IT王子 更新时间:2023-10-29 05:09:19 32 4
gpt4 key购买 nike

我正在尝试使用 swift 中的 C-Api。例如,C-Api 是这样的:

void doThingsOnRawData(const unsigned char* data);

Swift 将其转换为:

void doThingsOnRawData(UnsafePointer<UInt8>);

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

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

  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: NSData , data.bytesUnsafeRawPointer哪个行转换为 UnsafePointer<UInt8>assumingMemoryBound :

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

对于 data: Data它甚至更简单:

data.withUnsafeBytes { doThingsOnRawData($0) }

关于ios - swift 在不同的 UnsafePointer<T> 之间进行转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25359735/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com