【发布时间】:2017-12-07 08:14:06
【问题描述】:
我对 Swift 很陌生。如果我的问题听起来很愚蠢,请原谅。
我已经声明了一个结构如下:
struct RecorderState
{
var setupComplete: Bool
var dataFormat: AudioStreamBasicDescription
var queue: UnsafeMutablePointer<AudioQueueRef>
var buffers: [AudioQueueBufferRef]
var recordFile: AudioFileID
var bufferByteSize: UInt32
var currentPacket: Int64
var isRunning: Bool
var recordPacket: Int64
var errorHandler: ((NSError) -> Void)?
}
现在我需要编写我的类的 init 方法来初始化其中的结构。
class SimplePCMRecorder : NSObject
{
private var recorderState: RecorderState
init(numberBuffers: Int)
{
self.recorderState = RecorderState(
setupComplete: false,
dataFormat: AudioStreamBasicDescription(),
queue: UnsafeMutablePointer<AudioQueueRef>.alloc(1),
buffers: Array<AudioQueueBufferRef>(repeating: 0, count: numberBuffers),
recordFile:AudioFileID(),
bufferByteSize: 0,
currentPacket: 0,
isRunning: false,
recordPacket: 0,
errorHandler: nil
)
}
}
问题是,错误“表达式的类型在没有更多上下文的情况下不明确”一直显示在buffers: Array<AudioQueueBufferRef>(repeating: 0, count: numberBuffers) 行上。
我尝试了另一种方法,但还是一样。
从我在这里读到的Error: 'Type of expression is ambiguous without more context' 是编译器不知道对象的类型,因此它显示错误。但在这里,我已经宣布了。
我尝试通过在构造函数方法之后添加 as 再次转换它,但仍然没有工作。
我不明白为什么。我已将缓冲区变量的类型声明为包含AudioQueueBufferRef 的Array。但是编译器怎么还是检测不到呢?
【问题讨论】:
-
AudioQueueBufferRef是UnsafeMutablePointer<AudioQueueBuffer>的类型别名,即您必须将指向AudioQueueBuffer的指针作为初始值传递,您不能传递0。 -
@MartinR 嗨,谢谢!现在效果很好。