У меня есть ImagePickerPresentable протокола:Назначить делегат классу с использованием другого протокола с внедрением делегата по умолчанию?
protocol ImagePickerPresentable {
var imagePicker: UIImagePickerController? { get set }
func presentImagePicker(withSourceType: UIImagePickerControllerSourceType) throws
func dismissImagePicker()
weak var delegate: ImagePickerPresentableDelegate? { get set }
}
У меня есть расширение с реализацией по умолчанию для обеих функций.
extension ImagePickerPresentable where Self: UIViewController
ImagePickerPresentableDelegate:
protocol ImagePickerPresentableDelegate: class {
func imagePicker(imagePicker: UIImagePickerController, didFinishPickingImage image: UIImage?, withSuccess success: Bool)
}
Я пытался продлить ImagePickerPresentable для реализации по умолчанию функций делегата 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)
}
}
}
В контроллере представления, который принимает протокол Поручаю себя как imagePicker делегата , но ImagePickerPresentable не получает обратный вызов, когда imagePicker закончил сбор медиа.
Если я реализую функции делегата выбора изображений непосредственно в контроллере представления, я получаю обратный вызов. Я мог бы настроить функцию в протоколе, которая обрабатывает функцию делегата сборщика изображений, но возможно ли, чтобы делегат сборщика изображений использовал стандартную реализацию функций ImagePickerPresentable delegate?
Поскольку контроллер View View соответствует ImagePickerPresentable, UIImagePickerControllerDelegate и UINavigationControllerDelegate, я думал, что функции делегата в ImagePickerPresentable extension будут распознаны делегатом imagePicker.