我正在制作音乐播放器。因此,点击“切换”后,它会随机播放歌曲。在我再次点击“切换”后它应该正常播放。 我怎么能再次播放正常的歌曲。 (我可以尝试清除数组。再次创建相同的数组。它可能有效。但我不知道如何保持最后一首歌) 那么有没有简单的方法再次在正常的行中播放歌曲?
var ifshuffled=0
@IBAction func shuffleSwitch(_ sender: Any)
{
ifshuffled += 1
if ifshuffled % 2 == 0
{
//playnormal
}
else
{
songs.shuffle()
}
}
答案 0 :(得分:0)
列举您的清单:
let songs = [1, 3, 6, 8, 2, 4, 0]
var enumerated = Array(songs.enumerated())
// [(offset: 0, element: 1), (offset: 1, element: 3), (offset: 2, element: 6), (offset: 3, element: 8), (offset: 4, element: 2), (offset: 5, element: 4), (offset: 6, element: 0)]
enumerated.shuffle()
// [(offset: 1, element: 3), (offset: 4, element: 2), (offset: 2, element: 6), (offset: 5, element: 4), (offset: 0, element: 1), (offset: 6, element: 0), (offset: 3, element: 8)]
enumerated.sort { $0.offset < $1.offset }
// [(offset: 0, element: 1), (offset: 1, element: 3), (offset: 2, element: 6), (offset: 3, element: 8), (offset: 4, element: 2), (offset: 5, element: 4), (offset: 6, element: 0)]
通过这种方式,您可以对数组进行洗牌,在索引上对其进行排序,然后再次对其进行洗牌。你也可以保持一个没有洗过的副本,然后从适当的索引开始。
另一种方法是创建Array
个索引,随机播放,然后浏览它们并从Array
中的适当位置选择要播放的歌曲。然后在需要时切换到以递增顺序或任何其他方式播放歌曲:
var playOrder = Array(0..<songs.count)
playOrder.shuffle()
for current in playOrder {
playSong(index: playOrder[current])
}
(当然,我假设您已将Array
扩展为shuffle()
方法。)