如何制作" for..in"在循环中等待函数在swift中执行?

时间:2017-08-03 15:24:03

标签: swift for-loop

我正在使用我从Spotify SDK中提取的歌曲在我的应用中创建个人播放列表。 Spotify歌曲有一个uri,因此你只能使用Spotify播放器播放曲目,该播放器需要单个字符串uri并播放它,但我有一整套轨道URI。为了解决这个问题,我创建了一个for..in循环来播放每首歌曲,但是会发生什么呢?它遍历整个数组并且只播放数组中的最后一个轨道uri。

我的问题是:有没有办法让for..in循环等待每个项目完成播放才能完成数组的其余部分?

array of track uri's

function that plays each individual URI

2 个答案:

答案 0 :(得分:1)

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

let queue = DispatchQueue(label: "serial")
for song in playAllSongs{
    queue.async{
        //put all code here that you had inside the for loop
    }
}

答案 1 :(得分:0)

您不应使用for...in循环播放所有歌曲。即使您使用同步块,我也不确定它是否有效。 一种解决方案是收听Notification或在歌曲结束时调用完成块。然后你只需要播放数组中的下一个。