Получаю ошибку «UIImage? is not convetrible to UIImage». Как работать с UIImagePickerController в Swift 5?

Ошибка «UIImage? is not convertible to UIImage» возникает, потому что вы пытаетесь присвоить опциональную переменную типа UIImage? к переменной типа UIImage. Это означает, что переменная может содержать либо изображение типа UIImage, либо значение nil.

Чтобы работать с UIImagePickerController в Swift 5, вам надо правильно получить изображение из выбранного источника.

Вот шаги, которые вы можете выполнить:

  1. Создайте экземпляр UIImagePickerController:
let imagePicker = UIImagePickerController()
  1. Установите делегатом экземпляра класса, который будет получать вызовы делегата в вашем коде, скажем, текущий ViewController:
imagePicker.delegate = self
  1. Определите, какой тип источника вы хотите использовать для выбора изображения (например, фотоальбом или камера), и установите его соответствующим образом:
imagePicker.sourceType = .photoLibrary // выбор из фотоальбома
// imagePicker.sourceType = .camera // выбор из камеры, но необходимо учитывать необходимые разрешения на использование камеры в вашем приложении
  1. Проверьте, доступны ли заданный источник источник:
if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
    // Источник доступен
} else {
    // Источник недоступен
}
  1. Вызовите контроллер видеоизображений для выбора изображения:
present(imagePicker, animated: true, completion: nil)
  1. Чтобы получить выбранное изображение, реализуйте метод делегата imagePickerController(_:didFinishPickingMediaWithInfo:):
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let selectedImage = info[.originalImage] as? UIImage {
        // Изображение успешно выбрано
        // Вы можете использовать 'selectedImage' здесь или сохранить его в переменной класса для дальнейшего использования
    }
    
    dismiss(animated: true, completion: nil)
}
  1. Не забудьте реализовать метод делегата imagePickerControllerDidCancel(_:), чтобы закрыть контроллер изображений, если пользователь отменил выбор:
func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    dismiss(animated: true, completion: nil)
}

Это основные шаги, которые вам потребуются для работы с UIImagePickerController в Swift 5. Убедитесь, что вы подключили протоколы UIImagePickerControllerDelegate и UINavigationControllerDelegate, чтобы использовать делегаты. Вы также можете настроить appearance контроллера изображений, чтобы привести его в соответствие с дизайном вашего приложения.