2017-08-03 18 views
0

我在我的應用程序中使用我從Spotify SDK提取的歌曲創建個人播放列表。 Spotify歌曲有一個uri,因此您只能用Spotify播放器播放曲目,該播放器需要一個字符串uri並播放它,但我擁有整個曲目URI數組。爲了解決這個問題,我創建了一個for..in循環播放每首歌曲,但是它會遍歷整個數組,並且只播放數組中的最後一個音軌uri。如何讓循環中的「for..in」等待函數在swift中執行?

我的問題是:有沒有辦法讓for..in循環等待每個項目完成播放之前通過數組的其餘部分?

array of track uri's

function that plays each individual URI

+1

您應該將代碼添加到您的文章(使用代碼格式),而不是鏈接圖像。這將允許其他人輕鬆閱讀或複製/粘貼以測試解決方案。 – Paolo

+1

歡迎來到StackExchange。我只是在你的問題中修復了圖片標籤。但是,請不要將您的代碼作爲圖像發佈。相反,將它們提供爲文本。 – user1438038

回答

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 
    } 
} 
0

您不應該使用for...in循環播放所有歌曲。即使你使用同步塊,我也不確定它會起作用。 解決方案是收聽Notification或在歌曲結束時調用完成塊。然後你只需要播放下一個數組。