Как найти максимальное значение UnsafeMutablePointer<Float> с bufferSize типа данных UInt32 в Swift?

Я новичок в разработке и работаю над проектом, в котором мне нужно было визуализировать звуковые волны! Я использую модуль EZAudio, где для отображения волн на экране используется функция UpdatePlot и в параметре передается UnsafeMutablePoiter>. Я хочу, чтобы максимальное значение в каждом UnUnsafeMutablePointer находило наибольшую длину волны на графике.

buffer[0]//with a bufferSize UInt32

Я хочу найти самое высокое значение в этом массиве buffer[0]!

Пожалуйста помоги!!! ps: заранее спасибо

2 ответа

Для буфера массива []

Свифт 3:

buffer.max()

Свифт 2:

buffer.maxElement()

Эти две строки настолько сбивают с толку:

buffer[0]//with a bufferSize UInt32

Я хочу найти самое высокое значение в этом массиве buffer[0]!

Который является UnsafeMutablePointer<Float>, buffer сам или buffer[0]? Является buffer Свифт Array?

Я предполагаю buffer имеет тип UnsafeMutablePointer<Float>,

Вручную:

func myMax(buf: UnsafePointer<Float>, count: UInt32) -> Float? {
    guard case let bufCount = Int(count) where count > 0 else {return nil}
    var max = -Float.infinity
    for i in 0..<bufCount {
        if buf[i] > max {
            max = buf[i]
        }
    }
    return max
}

Используйте это так:

if let maxValue = myMax(buffer, count: bufferSize) {
    //Use the maximum value
    print(maxValue)
} else {
    //No maximum value when empty
    print("empty")
}

Если вы хотите использовать Swift Library, вы можете написать myMax как:

func myMax(buf: UnsafePointer<Float>, count: UInt32) -> Float? {
    return UnsafeBufferPointer(start: buf, count: Int(count)).maxElement()
}
Другие вопросы по тегам