代码之家  ›  专栏  ›  技术社区  ›  user6631314

IOS/Objective-C/Swift:在Swift中处理不安全指针

  •  -1
  • user6631314  · 技术社区  · 6 年前

    在我用于语音识别的Objective-C方法中,我有一些代码来测量说话人的音量。然而,当我试图将它翻译成Swift时,我遇到了Swift如何处理与Objective-C相关的指针的问题。

    以下是Objective-C doe:

        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]
              }
    

    提前谢谢你的建议。

    1 回复  |  直到 6 年前
        1
  •  1
  •   OOPer    6 年前

    我不明白你为什么需要 data .

    你可以这样写:

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

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