Swift: el uso de la extensión de protocolo da como resultado un "selector no reconocido enviado a la instancia"

Estoy tratando de agregar una funcionalidad de toque a todos los UIViewControllers donde se ajustan al protocoloMyProtocol.

A continuación se muestra cómo lo estoy haciendo:

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")
}

Lo que resulta en lo siguiente cuando se toca la pantalla:

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

Entiendo el error pero no sé cómo solucionarlo. ¿Alguien puede sugerir cómo se puede hacer esto?

Respuestas a la pregunta(2)

Su respuesta a la pregunta