Я очень новичок в 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
. Но почему компилятор до сих пор не может этого обнаружить?
AudioQueueBufferRef
— это typealias дляUnsafeMutablePointer<AudioQueueBuffer>
, т.е. вы должны передать указатель наAudioQueueBuffer
в качестве начального значения, вы не можете передать0
. - person Martin R   schedule 07.12.2017