IOS/Objective-C/Swift: обработка UnsafePointer в Swift

В методе Objective-C, который я использую для распознавания речи, у меня есть код для измерения громкости динамиков. Однако когда я пытаюсь перевести его на Swift, у меня возникают проблемы с тем, как Swift обрабатывает указатели относительно Objective-C.

Вот лани Objective-C:

    AVAudioFormat *recordingFormat = [inputNode outputFormatForBus:0];

        [inputNode installTapOnBus:0 bufferSize:1024 format:recordingFormat block:^(AVAudioPCMBuffer * _Nonnull buffer, AVAudioTime * _Nonnull when) {

            if ([buffer floatChannelData] != nil) {//open 1 in block

                float volume = fabsf(*buffer.floatChannelData[0]);

                    }
}];

Попытка сделать это в Swift делает:

 let data = UnsafeMutablePointer<Float>(buffer.floatChannelData)


            if let data = &buffer.floatChannelData?[0] {
                let _ : Float = data[0]
          }

дать несколько ошибок.

Спасибо заранее за любые предложения.


person user6631314    schedule 01.10.2018    source источник
comment
Вероятный дубликат, например. stackoverflow.com/ вопросы/35519745/   -  person matt    schedule 01.10.2018


Ответы (1)


Я не понимаю, зачем вам data.

Вы можете написать что-то вроде этого:

if buffer.floatChannelData != nil {
    let volume = buffer.floatChannelData![0].pointee
    //...
}

Или более быстро следующим образом:

if let floatChannelPointers = buffer.floatChannelData {
    let volume = floatChannelPointers[0].pointee
    //...
}
person OOPer    schedule 01.10.2018