如何使“for..in”在循环中等待函数在swift中执行?

如何使“for..in”在循环中等待函数在swift中执行?,swift,for-loop,Swift,For Loop,我正在应用程序中创建一个个人播放列表,使用从Spotify SDK中提取的歌曲。Spotify歌曲有一个uri,因此您只能使用Spotify播放器播放曲目,它使用一个字符串uri并播放,但我有一个完整的曲目uri数组。为了解决这个问题,我创建了一个for..in循环来播放每首歌曲,但是它会在整个数组中迭代,并且只播放数组中最后一个曲目uri 我的问题是:是否有一种方法可以让for..在循环中等待每个项目完成播放,然后再遍历阵列的其余部分 如果要按播放列表的顺序播放歌曲,需要将其添加到串行调度队列

我正在应用程序中创建一个个人播放列表,使用从Spotify SDK中提取的歌曲。Spotify歌曲有一个uri,因此您只能使用Spotify播放器播放曲目,它使用一个字符串uri并播放,但我有一个完整的曲目uri数组。为了解决这个问题,我创建了一个for..in循环来播放每首歌曲,但是它会在整个数组中迭代,并且只播放数组中最后一个曲目uri

我的问题是:是否有一种方法可以让for..在循环中等待每个项目完成播放,然后再遍历阵列的其余部分


如果要按播放列表的顺序播放歌曲,需要将其添加到串行调度队列中。串行队列将确保一次只在其内部执行一个项目,因此一次只执行一个异步请求,这意味着for循环的每个迭代将等待前一个循环完成

let queue = DispatchQueue(label: "serial")
for song in playAllSongs{
    queue.async{
        //put all code here that you had inside the for loop
    }
}
您不应该使用for…in循环来播放所有歌曲。即使使用同步块,我也不确定它是否能工作。
解决方案是在歌曲结束时收听通知或调用完成块。然后你只需要播放数组中的下一个。你应该使用代码格式将代码添加到帖子中,而不是链接图像。这将允许其他人轻松阅读或复制/粘贴以测试解决方案。欢迎使用StackExchange。我刚刚修复了你问题中的图像标签。但是,请不要将代码作为图像发布。相反,请将它们作为文本提供。