Swift: как обрабатывать результаты видео и фото из PHPicker?

Мне нужна возможность для пользователя выбирать несколько фотографий и видео из библиотеки фотографий. (Используя PHPicker) Я уже знаю, как получить изображения с помощью этого:

      func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
    var contentsData: [Data] = []
    for result in results {
        if result.itemProvider.canLoadObject(ofClass: UIImage.self) {
            result.itemProvider.loadObject(ofClass: UIImage.self) { selectedData, error in
                if let error = error {
                    print("PICKER ERROR: \(error)")
                } else {
                    if let selectedImage = selectedData as? UIImage {
                        if let selectedImageData = selectedImage.jpegData(compressionQuality: 0.5) {
                            contentsData.append(selectedImageData)
                            if contentsData.count == results.count {
                                self.parent.completion(contentsData)
                            }
                        }
                    }
                }
            }
        }
    }
    self.parent.presentationMode.wrappedValue.dismiss()
}

Я бы предположил, что мне нужно будет проверить, какой тип данных имеет каждый результат из PHPickerResult, а затем соответственно загрузить каждый объект. Проблема в том, что видеофайл может быть .mov, .mp4 и т. д. Как я могу определить PHPickerResult как видео и соответствующим образом обработать его?

1 ответ

Просто спросите, есть ли у поставщика элементов элемент типа UTType.movie.identifier. Если это так, продолжайте и загрузите его, позвонив loadFileRepresentation(forTypeIdentifier: UTType.movie.identifier).

Фактический код:

          if prov.hasItemConformingToTypeIdentifier(UTType.movie.identifier) {
        self.dealWithVideo(result)
    } else if prov.canLoadObject(ofClass: PHLivePhoto.self) {
        self.dealWithLivePhoto(result)
    } else if prov.canLoadObject(ofClass: UIImage.self) {
        self.dealWithImage(result)
    }
Другие вопросы по тегам