我在我的應用程序中使用我從Spotify SDK提取的歌曲創建個人播放列表。 Spotify歌曲有一個uri,因此您只能用Spotify播放器播放曲目,該播放器需要一個字符串uri並播放它,但我擁有整個曲目URI數組。爲了解決這個問題,我創建了一個for..in
循環播放每首歌曲,但是它會遍歷整個數組,並且只播放數組中的最後一個音軌uri。如何讓循環中的「for..in」等待函數在swift中執行?
我的問題是:有沒有辦法讓for..in
循環等待每個項目完成播放之前通過數組的其餘部分?
我在我的應用程序中使用我從Spotify SDK提取的歌曲創建個人播放列表。 Spotify歌曲有一個uri,因此您只能用Spotify播放器播放曲目,該播放器需要一個字符串uri並播放它,但我擁有整個曲目URI數組。爲了解決這個問題,我創建了一個for..in
循環播放每首歌曲,但是它會遍歷整個數組,並且只播放數組中的最後一個音軌uri。如何讓循環中的「for..in」等待函數在swift中執行?
我的問題是:有沒有辦法讓for..in
循環等待每個項目完成播放之前通過數組的其餘部分?
如果你想順序播放歌曲(播放列表等),您需要將他們添加一個串口DispatchQueue
。串行隊列將確保一次只在其中執行一個項目,因此一次只能執行一個異步請求,這意味着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
循環播放所有歌曲。即使你使用同步塊,我也不確定它會起作用。 解決方案是收聽Notification
或在歌曲結束時調用完成塊。然後你只需要播放下一個數組。
您應該將代碼添加到您的文章(使用代碼格式),而不是鏈接圖像。這將允許其他人輕鬆閱讀或複製/粘貼以測試解決方案。 – Paolo
歡迎來到StackExchange。我只是在你的問題中修復了圖片標籤。但是,請不要將您的代碼作爲圖像發佈。相反,將它們提供爲文本。 – user1438038