Swift 将指针元组强制转换为指针的指针

Swift 将指针元组强制转换为指针的指针,swift,ffmpeg,libav,Swift,Ffmpeg,Libav,我有一段C代码: #define AV_NUM_DATA_POINTERS 8 uint8_t *data[AV_NUM_DATA_POINTERS]; 在swift生成的界面中,如下所示: var data: (UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?

我有一段C代码:

#define AV_NUM_DATA_POINTERS 8
uint8_t *data[AV_NUM_DATA_POINTERS];
在swift生成的界面中,如下所示:

var data: (UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?)
但是,swift提供以下签名:

func sws_scale(..., _ srcSlice: UnsafePointer<UnsafePointer<UInt8>?>!, ...) -> Int32
func sws\u scale(…,\srcsicle:UnsafePointer!,…)->Int32
将巨大的元组转换为适用于
sws\u scale
函数的类型的最佳方法是什么?

示例来自:

应用于
sws\u标度

var data: (UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?)
withUnsafePointer(to: data) { dataPointer in
   let dataPointer =
      UnsafeRawPointer(dataPointer)
         .assumingMemoryBound(to: UnsafePointer<UInt8>?.self)

   sws_scale(…, dataPointer, …)
}
在优化构建中使用上述内容时,我遇到了内存对齐问题。

这可能会有所帮助:
var bytes: (CChar, CChar, CChar, CChar) = (0x61, 0x62, 0x63, 0)
let name: String = withUnsafePointer(to: &bytes) { ptr -> String in
   return String(cString: UnsafeRawPointer(ptr).assumingMemoryBound(to: CChar.self))
}
var data: (UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?, UnsafeMutablePointer<UInt8>?)
withUnsafePointer(to: data) { dataPointer in
   let dataPointer =
      UnsafeRawPointer(dataPointer)
         .assumingMemoryBound(to: UnsafePointer<UInt8>?.self)

   sws_scale(…, dataPointer, …)
}
withUnsafePointer(to: &data.0)