如何使用 OpaquePointer 调用 DSP 函数?

How to call a DSP function with OpaquePointer?

来自向量标量线性代数函数(来自vectorOps.h) https://developer.apple.com/reference/accelerate/1546030-visamax

func vIsamax(_ count: Int32, _ x: OpaquePointer) -> Int32)

计数 向量 x 中的元素数;必须是 4 的倍数。

x 浮点值向量数组。

我试过来自 https://swift.org/migration-guide/se-0107-migrate.html UnsafeRawPointerwithUnsafePointerMemoryLayout 等 目前还没有成功

无法使用...调用类型 'OpaquePointer' 的初始值设定项,CFData,

无法调用“”... yada, yada, yada

如何使用 OpaquePointer 调用 DSP 函数?

vIsamaxvFloat aka float4 元素的向量作为参数。 (每个 float4 包含 4 个浮点数。) C声明是

int32_t vIsamax(int32_t count, const vFloat *x);

哪个应该映射到Swift作为

public func vIsamax(_ count: Int32, _ x: UnsafePointer<vFloat>) -> Int32

而不是

public func vIsamax(_ count: Int32, _ x: OpaquePointer) -> Int32

但是您可以简单地传递一个 vFloat/float4 数组,如下所示 小例子:

import Swift
import Accelerate
import simd

let values = [ float4(-1.0, -2.0, -3.0, -4.0), float4(4.0, 3.0, 2.0, 1.0) ]
let idx = vIsamax(Int32(4 * values.count), values)
print(idx) // 3