IOS/Objective-C/Swift:在 Swift 中处理 UnsafePointer
IOS/Objective-C/Swift: Handling UnsafePointer in 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]
}
给出多个错误。
提前感谢您的任何建议。
我不明白你为什么需要data
。
你可以这样写:
if buffer.floatChannelData != nil {
let volume = buffer.floatChannelData![0].pointee
//...
}
或者更快捷的如下:
if let floatChannelPointers = buffer.floatChannelData {
let volume = floatChannelPointers[0].pointee
//...
}
在我用于语音识别的 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]
}
给出多个错误。
提前感谢您的任何建议。
我不明白你为什么需要data
。
你可以这样写:
if buffer.floatChannelData != nil {
let volume = buffer.floatChannelData![0].pointee
//...
}
或者更快捷的如下:
if let floatChannelPointers = buffer.floatChannelData {
let volume = floatChannelPointers[0].pointee
//...
}