Как сохранить / получить фото пользователя?

Для сохранения и получения фото пользователя в Swift вы можете использовать класс UIImagePickerController.

Давайте рассмотрим, как сохранить фото пользователя на устройстве:

1. Импортируйте библиотеку UIKit в ваш файл Swift, чтобы использовать классы UIImagePickerController и UIImage.

import UIKit

2. Создайте экземпляр класса UIImagePickerController и установите его делегат.

let imagePicker = UIImagePickerController()
imagePicker.delegate = self

Обратите внимание, что мы установили делегата на self. Для того, чтобы ваш класс мог быть делегатом UIImagePickerController, он должен соответствовать протоколу UIImagePickerControllerDelegate.

3. Реализуйте метод делегата imagePickerController(_:didFinishPickingMediaWithInfo:), чтобы получить выбранное фото и сохранить его на устройстве.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let pickedImage = info[.originalImage] as? UIImage {
        // Сохраняем фото на устройстве
        UIImageWriteToSavedPhotosAlbum(pickedImage, self, #selector(image(_:didFinishSavingWithError:contextInfo:)), nil)
    }
    
    picker.dismiss(animated: true, completion: nil)
}

@objc func image(_ image: UIImage, didFinishSavingWithError error: Error?, contextInfo: UnsafeRawPointer) {
    if let error = error {
        // Обработка ошибок сохранения
    } else {
        // Фото успешно сохранено на устройстве
    }
}

Метод imagePickerController(_:didFinishPickingMediaWithInfo:) будет вызываться после того, как пользователь выберет фото. Внутри этого метода мы получаем выбранное фото (pickedImage) и используем метод UIImageWriteToSavedPhotosAlbum(_:completionTarget:completionSelector:contextInfo:) для сохранения фото на устройстве. Мы также передаем селектор image(_:didFinishSavingWithError:contextInfo:), который будет вызываться после завершения сохранения фото. В этом обработчике вы можете обработать возможные ошибки сохранения или выполнить другие действия после успешного сохранения фото.

Теперь, когда у нас есть способ сохранить фото, рассмотрим, как получить фото пользователя:

1. Запросите разрешение пользователя на доступ к его фотоальбому. Для этого добавьте запись NSPhotoLibraryUsageDescription в файл Info.plist вашего проекта и укажите в ней текстовое описание того, зачем вам нужен доступ к фотоальбому.

2. Создайте экземпляр класса UIImagePickerController, установите его делегат, а затем вызовите метод present(_:animated:completion:) для отображения контроллера выбора фото.

let imagePicker = UIImagePickerController()
imagePicker.delegate = self
present(imagePicker, animated: true, completion: nil)

Обратите внимание, что мы снова установили делегата на self, поэтому ваш класс должен соответствовать протоколу UIImagePickerControllerDelegate.

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

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
    if let pickedImage = info[.originalImage] as? UIImage {
        // Выполняйте действия с выбранным фото
    }
    
    picker.dismiss(animated: true, completion: nil)
}

Метод imagePickerController(_:didFinishPickingMediaWithInfo:) будет вызываться после того, как пользователь выберет фото. Внутри этого метода мы получаем выбранное фото (pickedImage) и можем выполнять с ним любые действия, необходимые вашему приложению.

Теперь вы знаете, как сохранить и получить фото пользователя в приложении, используя Swift и класс UIImagePickerController.