В пределах Swift 3 мне нужно отправить данные на объект C, принимающий вход float **
.Swift 3 UnsafeMutablePointer инициализация для типа C float **
В Swift 2, я использовал, чтобы объявить UnsafeMutablePointer< UnsafeMutablePointer<Float32>>
, построить быстрый Array (только для инициализации!), И передать это указатель, и это сработало:
var bufferOut: UnsafeMutablePointer< UnsafeMutablePointer<Float32>>?
arrayOut = Array(repeating: Array(repeating: 0, count: Int(size1), count: Int(size2))
bufferOut = UnsafeMutablePointer< UnsafeMutablePointer<Float32>>(arrayOut)
Это все сломаны сейчас Swift 3!
- Что представляет собой самый Swifty способ передать C-Style
float**
и инициализировать его? - Что было бы лучшим способом присвоить значения в
UnsafeMutablePointer< UnsafeMutablePointer<T>>
?
В документах указано, что для T **
следует использовать AutoreleasingUnsafeMutablePointer<T>
, но на самом деле мне никогда не удалось его построить!
Обратите внимание, что я действительно не забочусь о массиве в приведенном выше примере! Если бы я мог просто инициализировать указатель напрямую, используя известные возможности, я бы это сделал.
Примечание: Expected use cases Section of UnsafeRawPointer описывает полезные ситуации, такие как C-массив и C-буферы, однако перевод таких методов для вышеуказанной конструкции не является очевидным!