Swift: использование расширения протокола приводит к «нераспознанному селектору, отправленному экземпляру»

Я пытаюсь добавить функцию касания ко всем UIViewControllers, где они соответствуют протоколуMyProtocol.

Вот как я это делаю:

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

Что приводит к следующему при нажатии на экран:

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

Я понимаю ошибку, но не знаю, как ее исправить. Кто-нибудь может подсказать, как это можно сделать?

Ответы на вопрос(2)

Ваш ответ на вопрос