当我从音频缓冲区数据以多点连接写入输出流时,出现错误
Cannot invoke initializer for type UnsafePointer<_> with an argument list of type (UnsafeMutableRawPointer)
我找到了很多解决方案,但这个解决方案对我没有帮助。
我的代码是:
func send(_ buffer: AudioBuffer) {
print(buffer.mData!)
print(buffer.mDataByteSize)
outputStreme?.write(UnsafePointer(buffer.mData), maxLength: buffer.mDataByteSize)
}
提前致谢..:)
最佳答案
当某些规范更改影响您的代码时,请检查官方引用。在你的情况下AudioBuffer.mData
类型为UnsafeMutableRawPointer?
,并且您需要将其传递给 OutputStream.write(_:maxLength:)
的第一个参数类型 UnsafePointer<UInt8>
.
你可以找到这个方法,它返回 UnsafeMutablePointer<T>
:
func assumingMemoryBound<T>(to: T.Type)
绑定(bind)的概念有点令人困惑,但似乎您可以使用它进行指针类型转换:
outputStreme?.write(buffer.mData!.assumingMemoryBound(to: UInt8.self), maxLength: Int(buffer.mDataByteSize))
(假设强制展开 !
按照您的建议足够安全 print(buffer.mData!)
。)
内存绑定(bind)对于大多数返回指针的 API 来说没有很好的定义,并且目前还没有效果。还有另一种类型转换方法 func bindMemory<T>(to: T.Type, capacity: Int)
,并且两者都可以正常工作(同样,就目前而言)。
关于ios - 无法使用 (UnsafeMutableRawPointer) 类型的参数列表调用类型 UnsafePointer<_> 的初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45181614/