В предыдущей статье я писал, как загружать видео из альбомов. В этой статье я напишу, как отслеживать изменения и вносить необходимые изменения в ваше приложение.

Если вы не видели предыдущую статью,



Чтобы наблюдать за изменениями, нам нужно добавить и реализовать протокол. ЭтоPHPhotoLibraryChangeObserver.

class ViewController: UIViewController, PHPhotoLibraryChangeObserver { }

Как мы видели в предыдущей статье, мы загружаем видео и регистрируем наш класс, чтобы наблюдать за изменениями ..

PHPhotoLibrary.shared().register(self)

Давайте понаблюдаем…

public func photoLibraryDidChange(_ changeInstance: PHChange)

Это метод, который мы собираемся реализовать. Это из протокола PHPhotoLibraryChangeObserver.

let fetchResultChangeDetails = changeInstance.changeDetails(for: assetsFetchResult)

из changeInstance мы можем получить подробную информацию об изменениях, например, что было удалено или добавлено, предоставив текущие полученные результаты assetsFetchResult. Поэтому он будет знать, что нового, по старым результатам.

если fetchResultChangeDetails равно nil, новых изменений нет. Обязательно проверьте, было ли это nil или нет. В противном случае произойдет сбой.

assetsFetchResult = (fetchResultChangeDetails?.fetchResultAfterChanges)!

Сбросьте assetsFetchResult после того, как fetchResultChangeDetails внесет новые изменения, получив (fetchResultChangeDetails?.fetchResultAfterChanges)!.

Тогда вы сможете увидеть, что было добавлено или удалено

let insertedObjects = fetchResultChangeDetails?.insertedObjects
let removedObjects = fetchResultChangeDetails?.removedObjects

Вставленные объекты и удаленные объекты содержат массив PHAsset .[PHAsset].

Просто переберите массивы и внесите необходимые изменения в свое приложение.

Итак, конечный результат такой ...

func photoLibraryDidChange(_ changeInstance: PHChange) {
    let fetchResultChangeDetails = changeInstance.changeDetails(for: assetsFetchResult)
    guard (fetchResultChangeDetails) != nil else {
        print("No change in fetchResultChangeDetails")
        return;
    }
    print("Contains changes")
    assetsFetchResult = (fetchResultChangeDetails?.fetchResultAfterChanges)!
    let insertedObjects = fetchResultChangeDetails?.insertedObjects
    let removedObjects = fetchResultChangeDetails?.removedObjects
}

Надеюсь, вы знаете, как отслеживать изменения и применять необходимые изменения в своих будущих приложениях.

Наслаждайтесь 😊