gpt4 book ai didi

C const void * 参数来自 Swift : Data? .withUnsafeBytes 和 UnsafeRawPointer

转载 作者:搜寻专家 更新时间:2023-11-01 07:11:11 25 4
gpt4 key购买 nike

我正在尝试传递 Data? 中包含的字节到 C 函数。 C 函数声明如下:

void func(const void *buffer);

我的 Swift 看起来像:

myData?.withUnsafeBytes { (buffer: UnsafeRawPointer) in
func(buffer)
}

但是,这会导致错误:

Cannot convert value of type '()' to closure result type '_'

如果我改变 UnsafeRawPointerUnsafePointer<Void> ,然后生成代码,但我收到警告:

UnsafePointer<Void> has been replaced by UnsafeRawPointer

解决这个问题的正确方法是什么?

最佳答案

因为您可以将任何数据指针传递给采用 void *争论,问题可以用

myData?.withUnsafeBytes { (buffer: UnsafePointer<Int8>)  in
myfunc(buffer)
}

或者你可以省略类型注解,让编译器自动推断类型:

myData?.withUnsafeBytes { (buffer)  in
myfunc(buffer)
}

myData?.withUnsafeBytes {
myfunc($0)
}

有趣的是,类型被推断为UnsafePointer<Void> , 没有任何警告。

关于C const void * 参数来自 Swift : Data? .withUnsafeBytes 和 UnsafeRawPointer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44834615/

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