我是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)行上。

arrays - 数组创建导致“表达式类型在没有更多上下文的情况下是模棱两可的”-LMLPHP

我尝试了另一种方法,但还是一样。

arrays - 数组创建导致“表达式类型在没有更多上下文的情况下是模棱两可的”-LMLPHP

从这里我读到的Error: 'Type of expression is ambiguous without more context'是编译器不知道对象的类型,因此显示错误。但是在这里,我已经声明了。

我试图通过在构造方法之后添加as来再次强制转换它,但仍然无法正常工作。

arrays - 数组创建导致“表达式类型在没有更多上下文的情况下是模棱两可的”-LMLPHP

我不明白为什么。我已经声明缓冲区变量的类型为包含ArrayAudioQueueBufferRef。但是,为什么编译器仍然无法检测到呢?

最佳答案

由于Martin R's
在上面发表评论。

class SimplePCMRecorder : NSObject
{
    private var recorderState: RecorderState
    init(numberBuffers: Int)
    {

        self.recorderState = RecorderState(
            setupComplete: false,
            dataFormat: AudioStreamBasicDescription(),
            queue: UnsafeMutablePointer<AudioQueueRef>.allocate(capacity: 1),
            buffers: Array<UnsafeMutablePointer<AudioQueueBuffer>>(repeating: UnsafeMutablePointer<AudioQueueBuffer>(bitPattern: 0)! , count: numberBuffers),
            recordFile:AudioFileID(bitPattern: 0)!,
            bufferByteSize: 0,
            currentPacket: 0,
            isRunning: false,
            recordPacket: 0,
            errorHandler: nil
        )
    }
}

关于arrays - 数组创建导致“表达式类型在没有更多上下文的情况下是模棱两可的”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47690452/

10-14 21:58
查看更多