我的哥哥看起来像这样
let samples = UnsafeMutableBufferPointer<Int16>(start:UnsafeMutablePointer(buffer.mData), count: Int(buffer.mDataByteSize)/sizeof(Int16))
运行此代码时会产生以下错误
Cannot invoke initializer for type 'UnsafeMutablePointer<_>' with an argument list of type '(UnsafeMutableRawPointer?)'
buffer.mdata有原始数据。我该如何解决这个问题。提前致谢
答案 0 :(得分:1)
假设buffer
是来自AudioBuffer
的{{1}}
框架:AVFoundation
是“可选的原始指针”
buffer.mData
,在Swift 3中,您必须绑定
指向类型指针的原始指针:
UnsafeMutableRawPointer?
参见SE-0107 UnsafeRawPointer API 有关原始指针的更多信息。
答案 1 :(得分:0)
根据文件:
// Creates an UnsafeMutablePointer over the count contiguous Element instances beginning at start.
init(start: UnsafeMutablePointer<Element>?, count: Int)
所以
let samples = UnsafeMutableBufferPointer<Int16>(start:UnsafeMutablePointer(buffer.mData), count: Int(buffer.mDataByteSize)/sizeof(Int16))
将是:
let byteSize = Int16(buffer.mDataByteSize)/sizeOf(Int16)
let buffer:UnsafeMutablePointer<Int16> = buffer.mData.assumingMemoryBound(to: Int16.self)
let samples = UnsafeMutableBufferPointer<Int16>(start:buffer, count:byteSize)
将UnsafeMutableRawPointer
转换为UnsafeMutablePointer<T>
的方式有多种。
Martin在上面的答案中已经给出了一次转换,其他的就是这个例子。