Создание массива вызывает «Тип выражения неоднозначен без дополнительного контекста»

Я очень новичок в 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).

введите здесь описание изображения

Я пробовал по другому, но все равно.

введите здесь описание изображения

Из того, что я прочитал здесь Ошибка: "Тип выражения неоднозначен без дополнительного контекста ' заключается в том, что компилятор не знает тип объекта, поэтому он показывает ошибку. Но здесь я уже заявил об этом.

Я попытался бросить его снова, добавив as после метода конструктора, но все равно не сработало.

введите здесь описание изображения

Я не понимаю, почему. Я объявил тип переменной буферов как Array, содержащий AudioQueueBufferRef. Но почему компилятор до сих пор не может этого обнаружить?


person Random Forkson    schedule 07.12.2017    source источник
comment
AudioQueueBufferRef — это typealias для UnsafeMutablePointer<AudioQueueBuffer>, т.е. вы должны передать указатель на AudioQueueBuffer в качестве начального значения, вы не можете передать 0.   -  person Martin R    schedule 07.12.2017
comment
@MartinR Привет, спасибо! Теперь это работает нормально.   -  person Random Forkson    schedule 07.12.2017


Ответы (1)