Implementierungsprotokoll durch Erweiterung [duplizieren]

Diese Frage hat hier bereits eine Antwort:

Swift: Bei Verwendung der Protokollerweiterung wird der nicht erkannte Selektor an die Instanz gesendet. 2 Antworten

Ich versuche, ein Protokoll zu erstellen, das den Prozess der Verwendung von UIImagePickerController umschließt, um die Optimierung in meinen Apps zu verbessern. Ich habe im Wesentlichen so etwas:

public protocol MediaAccessor : UIImagePickerControllerDelegate, UINavigationControllerDelegate {
    func mediaCaptured(title: String, fileData: NSData, fileType: String)
}

und eine Erweiterung, die die Anforderungen an die Berechtigung und die Handhabung der Delegate-Methoden erheblich vereinfacht:

public extension MediaAccessor where Self : UIViewController {
    public func captureMedia() {
        //All sorts of checks for picker authorization
        let picker = UIImagePickerController()
        picker.delegate = self
        self.presentViewController(picker, animated: true, completion: nil)
    }

    func imagePickerController(picker: UIImagePickerController, didFinishPickingImage image: UIImage!, editingInfo: [NSObject : AnyObject]!) {
        //implementation of the delegate in extension
        //even though everything compiles, this method is not called on picker completion
    }
}

So wird alles kompiliert, aber die Implementierung von UIImagePickerControllerDelegate über die Erweiterung scheint sich nicht zu registrieren. Wenn ich die Auswahl zeige, kann ich ein Bild aufnehmen, aber der Aufruf didFinishPickingImage kommt nie vor. Wenn ich diesen Aufruf direkt in den Controller verschiebe, funktioniert alles einwandfrei, aber die Idee dabei war, dieses Zeug vor dem View-Controller zu verbergen, um eine sehr saubere Schnittstelle zu schaffen, damit ein Controller vom Gerät aus auf Medien zugreifen kann. Ist das Implementieren von Protokollmethoden über eine Erweiterung wie diese nicht möglich? Kann ich etwas ändern, damit dies funktioniert, ohne das Protokoll direkt in meinem View-Controller implementieren zu müssen?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage