J'ai un ImagePickerPresentable de protocole:Affecter un délégué à une classe en utilisant un autre protocole avec l'implémentation déléguée par défaut?
protocol ImagePickerPresentable {
var imagePicker: UIImagePickerController? { get set }
func presentImagePicker(withSourceType: UIImagePickerControllerSourceType) throws
func dismissImagePicker()
weak var delegate: ImagePickerPresentableDelegate? { get set }
}
J'ai une extension avec la mise en œuvre par défaut pour les deux fonctions.
extension ImagePickerPresentable where Self: UIViewController
ImagePickerPresentableDelegate:
protocol ImagePickerPresentableDelegate: class {
func imagePicker(imagePicker: UIImagePickerController, didFinishPickingImage image: UIImage?, withSuccess success: Bool)
}
J'ai essayé d'étendre ImagePickerPresentable pour la mise en œuvre par défaut des fonctions de délégué imagePicker:
extension ImagePickerPresentable where Self: UIImagePickerControllerDelegate & UINavigationControllerDelegate {
func imagePickerControllerDidCancel(picker: UIImagePickerController) {
dismissImagePicker()
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
// No Callback
if let editedImage = info[UIImagePickerControllerEditedImage] as? UIImage {
delegate?.imagePicker(imagePicker: picker, didFinishPickingImage: editedImage, withSuccess: true)
} else if let originalImage = info[UIImagePickerControllerOriginalImage] as? UIImage {
delegate?.imagePicker(imagePicker: picker, didFinishPickingImage: originalImage, withSuccess: true)
} else {
delegate?.imagePicker(imagePicker: picker, didFinishPickingImage: nil, withSuccess: false)
}
}
}
Dans le contrôleur de vue qui adopte le protocole que je cède moi en tant que délégué imagePicker , mais ImagePickerPresentable n'obtient pas le rappel lorsque l'imagePicker a fini de choisir le média.
Si j'implémente les fonctions de délégué du sélecteur d'image directement dans le contrôleur de vue, j'obtiens le rappel. Je pourrais installer une fonction dans le protocole qui manipule la sortie de fonction de délégué de sélecteur d'image mais est-il possible d'obtenir le délégué de sélecteur d'image pour employer l'exécution par défaut des fonctions de délégué de ImagePickerPresentable directement? Comme mon contrôleur View est conforme à ImagePickerPresentable, UIImagePickerControllerDelegate et UINavigationControllerDelegate, je pensais que les fonctions déléguées dans l'extension ImagePickerPresentable seraient reconnues par le délégué imagePicker.