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

Ich versuche, allen UIViewControllern, die dem Protokoll @ entsprechen, eine Funktion zum Tippen hinzuzufügeMyProtocol.

Below ist, wie ich es mache:

import UIKit

protocol MyProtocol: class{
    var foo: String? {get set}
    func bar()
}


extension MyProtocol where Self: UIViewController {
    func bar() {
        print(foo)
    }
}


class TestViewController: UIViewController, MyProtocol{
    var foo: String?

    override func viewDidLoad() {
        super.viewDidLoad()

        foo = "testing"
        let tapGesture = UITapGestureRecognizer(target: self, action: "bar")
}

Was zu folgenden Ergebnissen führt, wenn auf den Bildschirm getippt wird:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: unrecognized selector sent to instance

Ich verstehe den Fehler, weiß aber nicht, wie ich ihn beheben soll. Kann jemand vorschlagen, wie dies getan werden kann?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage