我正在尝试传递 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 '_'
如果我改变 UnsafeRawPointer
至 UnsafePointer<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/