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

标签 c swift unsafe-pointers

我正在尝试传递 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/

相关文章:

c - C程序中多个线程的线程同步打印顺序输出

c - 不相交动态内存释放分配内存问题

c - 如何关闭 C 语言中的指数表示法?

ios - 如何在 Swift 中旋转 UIAlertController

swift 如何使渐变层从不同的位置开始

ios - 将 UIGestureRecognizer 初始化为 Swift 中属性定义的一部分?

ios - Xcode 10 Swift 构建错误 : "Converting non-escaping value to ' T' may allow it to escape"

c - 从二进制文件中读取随机结构数组元素

swift - 使用 Swift 从 NSTextfield 到 (const unsigned char *)

swift - UnsafePointer<Int8> 不工作