Audio 如何在SwiftUI中等待音频完成?

Audio 如何在SwiftUI中等待音频完成?,audio,swiftui,completionhandler,Audio,Swiftui,Completionhandler,我只想等到声音结束后再调用下一个声音… 这是我用来播放处理程序声音的ConentView结构中的主要函数: func askNew(){ self.isPlaying = true playQuestion{ //1st audio askNew{ //2nd audio to play //Change the global @State to see the

我只想等到声音结束后再调用下一个声音…

这是我用来播放处理程序声音的
ConentView结构中的主要函数:

func askNew(){

        self.isPlaying = true
        playQuestion{ 
        //1st audio
            askNew{
            //2nd audio to play

                //Change the global @State to see the result
                self.isPlaying = false
            }

        }

    }
}
播放声音的小功能。显然,他们只让我们知道音频会话是否开始,而不等待结束

// MARK: - Question
func playQuestion(finished: () -> Void) {
   GSAudio.sharedInstance.playSound(sound: "question", type: "mp3", loop: false)
   finished()
}

func askNewSetCurrent(finished: () -> Void){
   GSAudio.sharedInstance.playSound(sound: "next_sound", type: "mp3", loop: false)
   finished()
}

试着这样想

import AVFoundation

class SwiftUIViewModel: NSObject, ObservableObject {
    private var avPlayer: AVAudioPlayer!
    private var arrayOfAllTracks = [Track]()

    // call play track from view
    func playTrack() {
        self.play(track: arrayOfAllTracks[0])
    }

    private func play(track: Track) {
        self.avPlayer = try! AVAudioPlayer(contentsOf: track.url, fileTypeHint: AVFileType.mp3.rawValue)

        self.avPlayer?.delegate = self

        avPlayer.play()
    }

    private func playNext() {
        let track = self.arrayOfAllTracks[1]
        self.play(track: track)
    }
}

extension SwiftUIViewModel: AVAudioPlayerDelegate {
    func audioPlayerDidFinishPlaying(_ player: AVAudioPlayer, successfully flag: Bool) {
        guard flag else { return }

        self.playNext()
    }
}

struct Track {
    let url: URL!
}

@克里斯变小了。我想不管怎样,总有人会要求展示球员的水平。