【问题标题】:Array creation causes 'Type of expression is ambiguous without more context'数组创建导致“没有更多上下文的表达式类型不明确”
【发布时间】: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&lt;AudioQueueBufferRef&gt;(repeating: 0, count: numberBuffers) 行上。

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

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

我尝试通过在构造函数方法之后添加 as 再次转换它,但仍然没有工作。

我不明白为什么。我已将缓冲区变量的类型声明为包含AudioQueueBufferRefArray。但是编译器怎么还是检测不到呢?

【问题讨论】:

  • AudioQueueBufferRefUnsafeMutablePointer&lt;AudioQueueBuffer&gt; 的类型别名,即您必须将指向AudioQueueBuffer 的指针作为初始值传递,您不能传递0
  • @MartinR 嗨,谢谢!现在效果很好。

标签: arrays swift swift4


【解决方案1】:

由于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
        )
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 2021-05-17
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    相关资源
    最近更新 更多