DSPComplex - это структура, содержащая мнимое и реальное значение типа Float.Это два поплавка.Он не может быть преобразован в массив чисел с плавающей точкой.Однако вы должны сначала преобразовать его в UnsafeBufferPointer, а затем передать его в массив.Тогда у вас есть массив Swift структур DSPComplex.
func arrayForDSPComplex(pointer: UnsafePointer<DSPComplex>, count: Int) -> [DSPComplex] {
let buffer = UnsafeBufferPointer<DSPComplex>(start: pointer, count: count)
return Array(buffer)
}
Вы можете даже обобщить его, используя универсальные шаблоны, если хотите.
func arrayForPointer<T>(_ pointer: UnsafePointer<T>, count: Int) -> [T] {
let buffer = UnsafeBufferPointer(start: pointer, count: count)
return Array(buffer)
}
Для изменяемых указателей вам нужна другая функция.
func mutableArrayForPointer<T>(_ pointer: UnsafeMutablePointer<T>, count: Int) -> [T] {
let buffer = UnsafeMutableBufferPointer(start: pointer, count: count)
return Array(buffer)
}
Вы можете немного улучшить его, поместив функции в качестве расширений для типов указателей.
extension UnsafePointer {
func arrayCopying(elementCount: Int) -> [Pointee] {
let buffer = UnsafeBufferPointer(start: self, count: elementCount)
return Array(buffer)
}
}
extension UnsafeMutablePointer {
func arrayCopying(elementCount: Int) -> [Pointee] {
let buffer = UnsafeMutableBufferPointer(start: self, count: elementCount)
return Array(buffer)
}
}
``