swift3中的UnsafeMutablePointer出错

时间:2016-11-15 08:56:56

标签: swift swift3 unsafe-pointers

我的哥哥看起来像这样

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有原始数据。我该如何解决这个问题。提前致谢

2 个答案:

答案 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在上面的答案中已经给出了一次转换,其他的就是这个例子。