将UnsafeMutablePointer转换为UnsafePointer

6
我在我的Swift项目中使用了一份C库,其中一个函数需要一个 UnsafePointer<UnsafePointer<UInt8>?>!类型的传入输出参数来传递数据。但问题是我手头的数据是用UnsafeMutablePointer<UnsafeMutablePointer<UInt8>?>!类型表示的。
我的问题是- 如何以最高效和最简便的方式将UnsafeMutablePointer转换为UnsafePointer在Swift 3中?这些指针在“文件上”并没有太大的区别,在技术上也不应该有太大的区别,但我在这个主题上找不到有价值的信息。
如果有任何帮助将不胜感激。谢谢

在C语言中,该函数是如何声明的? - Martin R
也许可以使用 unsafeBitCast - Cristik
@MartinR 你好,谢谢你的回答!我认为这并不重要,但是在这里:int av_image_alloc(uint8_t *pointers[4], int linesizes[4], int w, int h, enum AVPixelFormat pix_fmt, int align); - Eugene Alexeev
@Cristik 你好!我不知道这是否是一个高效的解决方案,但感谢你的建议! - Eugene Alexeev
1
@EugeneAlexeev,它是100%有效的,因为它在O(1)中运行,但不确定编译器或运行时是否允许您正确地进行转换。并且正如其名称所示,它是不安全的,如果使用不当可能会导致意外结果。 - Cristik
@EugeneAlexeev:好的,我问这个问题是因为我想知道“输入输出参数”的情况。那个C函数将被导入Swift作为public func av_image_alloc(_ pointers: UnsafeMutablePointer<UnsafeMutablePointer<UInt8>?>!, ...),使用可变指针,所以我想知道为什么你要将你的参数转换为UnsafePointer - Martin R
1个回答

10

如果你写 var up = UnsafePointer(ump),那么 up 的类型会自动推断。 - Martin R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接