我如何让iOS应用程序在播放列表中不断循环播放声音?

我如何让iOS应用程序在播放列表中不断循环播放声音?,ios,swift,avaudioplayer,Ios,Swift,Avaudioplayer,我正在尝试制作一个应用程序,它可以播放一系列与数组内容相关的蜂鸣音,每当播放所有蜂鸣音时,应用程序都应该从数组开始重新播放 这是我的代码: var counter = 0 var song = ["1","2","3","4"] func music() { while counter < song.count { var audioPath = NSBundle.mainBundle().pathForResource("\(song[counter])",

我正在尝试制作一个应用程序,它可以播放一系列与数组内容相关的蜂鸣音,每当播放所有蜂鸣音时,应用程序都应该从数组开始重新播放

这是我的代码:

var counter = 0
var song = ["1","2","3","4"]

func music() {
    while counter < song.count {

        var audioPath = NSBundle.mainBundle().pathForResource("\(song[counter])", ofType: "wav")!
        var error : NSError? = nil
        player = AVAudioPlayer(contentsOfURL: NSURL(string: audioPath), error: &error)
        if error == nil {
            player.delegate = self
            player.prepareToPlay()
            player.play()
        }


        func audioPlayerDidFinishPlaying(player: AVAudioPlayer!, successfully flag: Bool) {
            if flag {
                counter++
            }
        }

        if ((counter + 1) == song.count) {
            counter = 0
        }

    }
}
var计数器=0
变量宋=[“1”、“2”、“3”、“4”]
func music(){
当计数器

如何实现这一点?

这里不需要循环。逻辑如下:播放一个音乐文件,当该文件结束时,递增计数器并播放下一个文件

var counter = 0
var song = ["1","2","3","4"]

func music()
{

var audioPath = NSBundle.mainBundle().pathForResource("\(song[counter])", ofType: "wav")!
var error : NSError? = nil
player = AVAudioPlayer(contentsOfURL: NSURL(string: audioPath), error: &error)
if error == nil {
    player.delegate = self
    player.prepareToPlay()
    player.play()
}

func audioPlayerDidFinishPlaying(player: AVAudioPlayer!, successfully flag: Bool)
{
    player.delegate = nil

    if flag {
        counter++
    }

    if ((counter + 1) == song.count) {
        counter = 0
    }

    music()
}

您可以使用
AVQueuePlayer

let song = ["1","2","3","4"]

func music() {

    let items = song.compactMap {
        Bundle.main.url(forResource: "\($0)", withExtension: "wav")
    }.map {
        AVPlayerItem(url: $0)
    }

    let player = AVQueuePlayer(items: items)

    player.delegate = self
    player.play()
}

尝试将玩家的代理设置为零,如我编辑的答案中所示