Как мне преобразовать массив UnsafePointer <DSPComplex>в массив с плавающей точкой? - PullRequest
0 голосов
/ 12 февраля 2019

Как мне преобразовать массив UnsafePointer<DSPComplex> в массив Floats в Swift?

Я видел эту страницу , но, поскольку я новичок в Swift, у меня нетподсказка о том, как это сделать для массива чисел с плавающей точкой.

1 Ответ

0 голосов
/ 12 февраля 2019

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)
    }
}
``
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...