В примере Core Audio Recorder функция AudioQueueInputCallback
записывается как привязка переменной вне класса Recorder
.Я пытаюсь использовать его внутри структуры, но я не могу получить доступ к каким-либо методам экземпляра.Это выдает ошибку: Члены экземпляра нельзя использовать для типа .
struct Recorder {
private var log = Logger()
private let utils = Utils()
func record() {
// ...
AudioQueueNewInput(&recordFormat, audioQueueInputCallback, &recorder, nil, nil, 0, &queue)
}
private let audioQueueInputCallback: AudioQueueInputCallback = { (inUserData: UnsafeMutableRawPointer?, inQueue: AudioQueueRef,
inBuffer: AudioQueueBufferRef, inStartTime: UnsafePointer<AudioTimeStamp>,
inNumPackets: UInt32, inPacketDesc: UnsafePointer<AudioStreamPacketDescription>?) in
log.debug() // <-- error: instance member cannot be used on type Recorder
}
Как записать audioQueueInputCallback
внутри структуры, чтобы внутри нее можно было получить доступ к переменным экземпляра?
Обновление: если я изменяю переменную на lazy как:
private lazy var audioQueueInputCallback: AudioQueueInputCallback = {
(_ inUserData: UnsafeMutableRawPointer?, _ inQueue: AudioQueueRef,
_ inBuffer: AudioQueueBufferRef, _ inStartTime: UnsafePointer<AudioTimeStamp>,
_ inNumPackets: UInt32, _ inPacketDesc: UnsafePointer<AudioStreamPacketDescription>?) in
log.debug("audio queue callback")
}
Я получаю Closure cannot implicitly capture a mutating self parameter
ошибку.