我正在使用我从Spotify SDK中提取的歌曲在我的应用中创建个人播放列表。 Spotify歌曲有一个uri,因此你只能使用Spotify播放器播放曲目,该播放器需要单个字符串uri并播放它,但我有一整套轨道URI。为了解决这个问题,我创建了一个for..in
循环来播放每首歌曲,但是会发生什么呢?它遍历整个数组并且只播放数组中的最后一个轨道uri。
我的问题是:有没有办法让for..in
循环等待每个项目完成播放才能完成数组的其余部分?
答案 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
或在歌曲结束时调用完成块。然后你只需要播放数组中的下一个。