Последние прослушанные песни (Swift)
Я хочу заполнить tableView
с последними услышанными песнями. С .nowPlayingItem
Я могу получить самую последнюю песню, но как я могу услышать песни раньше?
Я думаю, что на этот вопрос уже есть ответ в списке Получить песни, упорядоченные по времени последнего воспроизведения в iOS, но это в Objective-C, и я не могу перевести его. Или есть еще лучший способ сделать это в Swift?
2 ответа
Решение
Вы могли бы сделать что-то вроде этого:
let startTime: NSTimeInterval = NSDate().timeIntervalSince1970
let songsQuery: MPMediaQuery = MPMediaQuery.songsQuery()
let songsArray: [MPMediaItem] = songsQuery.items!
let songsNSArray : NSArray = NSArray(array: songsArray)
let descriptor: NSSortDescriptor = NSSortDescriptor(key: MPMediaItemPropertyLastPlayedDate, ascending: false)
let sortedResults: NSArray = songsNSArray.sortedArrayUsingDescriptors([descriptor])
let finishTime: NSTimeInterval = NSDate().timeIntervalSince1970
NSLog("Execution took %f seconds to return %i results.", finishTime - startTime, sortedResults.count)
Результаты будут сохранены в массиве sortedResults
Вот как вы можете сделать это в Swift,
let start = NSDate().timeIntervalSince1970
let songsQuery = MPMediaQuery.songsQuery()
if let songsArray = songsQuery.items {
let sortedArray = songsArray.sort { item1, item2 in
if let lastPlayedDateForItem1 = item1.lastPlayedDate,
let lastPlayedDateForItem2 = item2.lastPlayedDate {
return lastPlayedDateForItem1.compare(lastPlayedDateForItem2) == .OrderedDescending
}
return false
}
}