Расширения протокола с селекторами в Swift

Я пытаюсь расширить протокол в Swift, добавив функцию registerGestureRecognizers. Вот полная реализация.

FilterableView используется классами, которые наследуются от UIImageView.

import UIKit protocol FilterableView : class { var name :String { get } var view :UIImageView { get } func applyFilter(originalImage :UIImage) -> UIImage } extension FilterableView { func registerGestureRecognizers() { let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(Self.filterTapped(_:))) } func filterTapped(recognizer :UITapGestureRecognizer) { print("filter Tapped") } } 

На этой строке:

  let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(Self.filterTapped(_:))) 

Я получаю следующее сообщение:

 Argument of '#selector' refers to a method that is not exposed to Objective-C 

Что мне не хватает?

Я добавил ключевое слово @objc, но те же проблемы.

введите описание изображения здесь

ОБНОВЛЕНИЕ 2:

Теперь у меня проблемы в моих классах, которые соответствуют протоколу FilterableView. Xcode жалуется, что я должен реализовать функцию filterTapped в своих классах, хотя я представил реализацию в методе расширения протокола.

One Solution collect form web for “Расширения протокола с селекторами в Swift”

Повторите свое редактирование: вы добавили неправильную функцию в свой протокол. Добавить func filterTapped(recognizer: UITapGestureRecognizer) не func registerGestureRecognizers() .

 @objc protocol FilterableView: class { var name: String { get } var view: UIImageView { get } func applyFilter(originalImage: UIImage) -> UIImage func filterTapped(recognizer: UITapGestureRecognizer) } extension FilterableView { func registerGestureRecognizers() { let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(Self.filterTapped(_:))) } func filterTapped(recognizer :UITapGestureRecognizer) { print("filter Tapped") } } 
  • Как сделать время выполнения игровой площадки так же быстро, как если бы мы запускали приложение iOS
  • Swift & SpriteKit: Изображение на весь экран
  • Текущее местоположение не работает в Google Map
  • Декодирование Base64 в iOS 7+
  • Когда использовать takeUnretainedValue () или takeRetainedValue () для извлечения неуправляемых объектов в Swift?
  • Firebase: когда вызывать removeObserverWithHandle в swift
  • iOS 9.3: Произошла ошибка SSL, и безопасное соединение с сервером невозможно сделать
  • Как открыть новый экран контакта напрямую?
  • Как удалить ребенка из Firebase (Swift)
  • Swift 3.0, Alamofire 4.0 Дополнительный аргумент «метод» в вызове
  • Загрузка WKWebView при загрузке
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.