gpt4 book ai didi

无法将类型 'UnsafePointer' 的值转换为预期的参数类型 'UnsafePointer<_>'

转载 作者:搜寻专家 更新时间:2023-10-30 23:15:09 24 4
gpt4 key购买 nike

我正在为 OS X 使用 Swift 中的外部 C 库。我得到一个值 cda,它在 C 中定义为 double* (它是一个指向 double 组的指针)。

当导入到 Swift 中时,它会将类型识别为 UnsafeMutablePointer。我正在尝试将此指针和计数转换为 double 组。这是我正在使用的代码(假设 arrlen 是数组的正确计数):

let doublearrptr = UnsafePointer<Double>(cda)
let xptarr = UnsafeBufferPointer<Double>(start: doublearrptr, count:arrlen)

但是,在编译这段代码时,出现错误:

Cannot convert value of type 'UnsafePointer<Double>' to expected argument type 'UnsafePointer<_>'

我对 Swift 比较陌生,但我很确定我无法转换为 UnsafePointer<_> .我尝试转换为 UnsafePointer<Void> ,但得到了同样的错误。 Swift 确实认识到 cdaUnsafeMutablePointer<Double> .

最佳答案

所以,我能够解决它,尽管是以一种迂回的方式。

我创建了一个新函数 convert 并使用了它:

func convertArr<T>(count: Int, data: UnsafePointer<T>) -> [T] {

let buffer = UnsafeBufferPointer(start: data, count: count)
return Array(buffer)
}
...
let doublearrptr = UnsafePointer<Double>(cda)
let arr = convertArr(Int(shobjarrlen), data: doublearrptr)

出于某种原因,这有效但不是原始语法...

我仍然愿意从为什么我的原始语法不起作用中得到答案。

关于无法将类型 'UnsafePointer<Double>' 的值转换为预期的参数类型 'UnsafePointer<_>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37244438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com