import Foundation import AVFoundation final class AudioPlayer: NSObject, AVAudioPlayerDelegate { private var player: AVAudioPlayer? private var onFinish: (() -> Void)? func play(url: URL, onFinish: (() -> Void)? = nil) { self.onFinish = onFinish do { let data = try Data(contentsOf: url) let player = try AVAudioPlayer(data: data) player.delegate = self player.prepareToPlay() player.play() self.player = player } catch { print("Audio play error: \(error)") } } func stop() { player?.stop() player = nil } func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) { onFinish?() } }