Я пытаюсь разделить изображения из фотобиблиотеки пользователя в представлении коллекции на основе даты их создания в порядке возрастания.Я использую этот метод, который, очевидно, мучительно медленный, особенно когда количество картинок велико.
Сначала я выбираю PHAssets в отсортированном порядке:
let allPhotosOptions = PHFetchOptions()
allPhotosOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: true)]
inFetchResult = PHAsset.fetchAssets(with: allPhotosOptions)
, а затем копирую ресурсы в массив:
inFetchResult.enumerateObjects { (asset, index, stop) in
let yearComponent = Calendar.current.component(.year, from: asset.creationDate!)
let monthComponent = Calendar.current.component(.month, from: asset.creationDate!)
let monthName = DateFormatter().monthSymbols[monthComponent - 1]
var itemFound = false
for (index, _) in self.dateArray.enumerated() {
if self.dateArray[index].date == "\(monthName) \(yearComponent)" {
self.dateArray[index].assets.append(asset)
itemFound = true
break
} else {
continue
}
}
if !itemFound {
self.dateArray.append((date: "\(monthName) \(yearComponent)", assets: [asset]))
}
}
Затем я использую этот массив в качестве моегоисточник данных.
Есть ли лучший способ сделать это?Я пробовал словари, но они меняют порядок объектов.Я также подумал о том, чтобы найти способ добавлять ресурсы в мой dateArray только тогда, когда они будут отображаться в представлении, однако в представлении коллекции необходимо знать общее количество разделов заранее, поэтому я должен просмотреть все изображения и проверитьих даты перед загрузкой просмотра.