Получаю ошибку «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()

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

imagePicker.delegate = self

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

imagePicker.sourceType = .photoLibrary // выбор из фотоальбома
// imagePicker.sourceType = .camera // выбор из камеры, но необходимо учитывать необходимые разрешения на использование камеры в вашем приложении

4. Проверьте, доступны ли заданный источник источник:

if UIImagePickerController.isSourceTypeAvailable(.photoLibrary) {
    // Источник доступен
} else {
    // Источник недоступен
}

5. Вызовите контроллер видеоизображений для выбора изображения:

present(imagePicker, animated: true, completion: nil)

6. Чтобы получить выбранное изображение, реализуйте метод делегата imagePickerController(_:didFinishPickingMediaWithInfo:):

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let selectedImage = info[.originalImage] as? UIImage {
        // Изображение успешно выбрано
        // Вы можете использовать 'selectedImage' здесь или сохранить его в переменной класса для дальнейшего использования
    }
    
    dismiss(animated: true, completion: nil)
}

7. Не забудьте реализовать метод делегата imagePickerControllerDidCancel(_:), чтобы закрыть контроллер изображений, если пользователь отменил выбор:

func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
    dismiss(animated: true, completion: nil)
}

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