class ViewController: UIViewController { func pickImage(fromSource sourceType: UIImagePickerControllerSourceType) { guard UIImagePickerController.isSourceTypeAvailable(sourceType) else { return } let imagePickerController = UIImagePickerController() imagePickerController.sourceType = sourceType imagePickerController.delegate = self present(imagePickerController, animated: true, completion: nil) } } extension ViewController: UIImagePickerControllerDelegate, UINavigationControllerDelegate { public func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String: Any]) { if let image = info[UIImagePickerControllerOriginalImage] as? UIImage { // handle image } else if let image = info[UIImagePickerControllerEditedImage] as? UIImage { // handle image } picker.dismiss(animated: true) } }