【问题标题】:how to find maximum value of UnsafeMutablePointer<Float> with bufferSize of data type UInt32 in swift?如何在swift中找到数据类型为UInt32的bufferSize的UnsafeMutablePointer<Float>的最大值?
【发布时间】:2016-07-24 20:38:27
【问题描述】:
我是 swift 新手,正在从事一个我必须可视化音频波的项目!
我正在使用 EZAudio pod 在屏幕上绘制波形的位置使用函数 UpdatePlot 并在参数中传递 UnsafeMutablePoiter>
我希望每个 UnUnsafeMutablePointer 中的最大值找到图中的最高波长
buffer[0]//with a bufferSize UInt32
我想在那个 buffer[0] 数组中找到最大值!
请帮忙!!!
p.s: 先谢谢了
【问题讨论】:
标签:
ios
swift
xcode7
cocoapods
nspointerarray
【解决方案1】:
对于数组缓冲区[]
斯威夫特 3:
buffer.max()
斯威夫特 2:
buffer.maxElement()
【解决方案2】:
这两行太混乱了:
buffer[0]//with a bufferSize UInt32
我想在那个 buffer[0] 数组中找到最大值!
UnsafeMutablePointer<Float>、buffer 本身或buffer[0] 是哪个? buffer 是 Swift 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 库,你可以写 myMax 为:
func myMax(buf: UnsafePointer<Float>, count: UInt32) -> Float? {
return UnsafeBufferPointer(start: buf, count: Int(count)).maxElement()
}