AVAudioPlayer is not playing sound

The most common culprit causing AVAudioPlayer not playing sound is ARC. When my audio player's scope is just within a function ARC deallocates the memory before playing sound after function is called. Here is an example code:


func playSoundEffect(assetName: string?) {
    if let sound = assetName{
        if let asset = NSDataAsset(name:sound){
            
            do {
                // Use NSDataAsset's data property to access the audio file stored in Sound.
                let soundEffect = try AVAudioPlayer(data:asset.data, fileTypeHint:"wav")
                // Play the above sound file.
                soundEffect?.play()
            } catch let error as NSError {
                print(error.localizedDescription)
            }
        }
    }
}

In code soundEffect is declared and initialised inside the function. When I call this function there is no sound. I assumed that ARC will kick in after audio player finishes playing sound. But that is not the case.

If I declare the soundEffect as optional instance variable which creates it’s scope within the lifecycle of instance of the class and assuming that instance of class is alive then I hear sound playing because audio player isn’t deallocated.
private var soundEffect:AVAudioPlayer?

This is minor thing to keep in mind. I spent time on investigating if my audio file was corrupted or naming was misspelled.