I am trying to create protocol where I can open UIimagePickerController with camera or Media Library according to user's choice.
here is some code:
import UIKit
protocol PFImagePickerProtocol: UIImagePickerControllerDelegate,UINavigationControllerDelegate where Self: UIViewController {
    func didSelectImage(image: UIImage?, error: Bool)
    func didCancelledImageSelection()
}
extension PFImagePickerProtocol {
    func openImageSelector(withCorp cropEnabled:Bool)  {
        let alertController = UIAlertController(title: "Action Sheet", message: "What would you like to do?", preferredStyle: .actionSheet)
        let camera = UIAlertAction(title: "Camera", style: .default) { (action) in
            self.openImagePicker(withCorp: cropEnabled, sourceType: .camera)
        }
        let library = UIAlertAction(title: "Photo Library", style: .default) { (action) in
            self.openImagePicker(withCorp: cropEnabled, sourceType: .photoLibrary)
        }
        alertController.addAction(camera)
        alertController.addAction(library)
        self.present(alertController, animated: true, completion: nil)
    }
    private func openImagePicker(withCorp cropEnabled:Bool, sourceType: UIImagePickerController.SourceType)  {
        let pickerVc = UIImagePickerController()
        pickerVc.allowsEditing = cropEnabled
        pickerVc.sourceType = sourceType
        pickerVc.delegate = self //is this the problem?
        self.present(pickerVc, animated: true, completion: nil)
    }
}
extension PFImagePickerProtocol{
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) {
        self.dismiss(animated: true, completion: nil)
        didCancelledImageSelection()
    }
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey : Any]) {
        if let image = info[UIImagePickerController.InfoKey.originalImage] as? UIImage {
            didSelectImage(image: image, error: false)
            return
        } else {
            didSelectImage(image: nil, error: true)
        }
        self.dismiss(animated: true, completion: nil)
    }
}
as I run the code. function 'didFinishPickingMediaWithInfo' is not called.
I found this answer useful. but if there anything that can solved this problem. kindly share it here.
feel free to comment on code.
 
    