2017-08-03 7 views
0

私は、Spotify SDKから取り込んだ曲を使って私のアプリに個人用プレイリストを作成しています。 Spotifyの曲にはuriが付いていますので、Spotifyプレーヤーでトラックを再生することができます。これは、単一の文字列uriを再生して再生しますが、トラックURIの配列全体があります。これを解決するために、ループごとにfor..inというループを作成しましたが、配列全体を繰り返し処理し、最後のトラックURIのみを再生します。"for..in"をループ内で作る方法は、関数を迅速に実行するのを待ちますか?

質問:for..inループの残りの部分を通過する前に各項目が再生を終了するのを待つ方法がありますか?

array of track uri's

function that plays each individual URI

+1

画像をリンクする代わりに、コードの書式を使用してコードを投稿に追加する必要があります。これにより、他の人が簡単にそれを読んだり、コピー&ペーストして解決策をテストすることができます。 – Paolo

+1

ようこそStackExchangeへ。あなたの質問に画像タグを修正しました。しかし、あなたのコードを画像として投稿しないようにしてください。代わりに、それらをテキストとして提供してください。 – user1438038

答えて

1

あなたは(プレイリストのように)順次曲を再生したい場合は、それらをシリアルDispatchQueueを追加する必要があります。シリアルキューは、一度に1つの項目だけが内部で実行されることを保証します。したがって、非同期要求の1つだけが一度に実行されます。つまり、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を聴いたり、曲が終了したときに完了ブロックを呼び出すことです。次に、配列内の次のものを再生するだけです。

関連する問題