Вызов функции расширения протокола из селектора

у меня есть класс протокола с именем MenuDisplayable. Этот протокол имеет расширение.

protocol MenuDisplayable {}

extension MenuDisplayable where Self: UIViewController {

func showMenu( ) {
  let storyboard = UIStoryboard(storyboard: .Menu)
   let menuVC = storyboard.instantiateInitialViewController() as! MenuVC
   present(menuVC, animated: true, completion: nil)
 }

}

Когда я вызываю функцию "showMenu" из #selector внутри класса viewController

let rightButton = UIBarButtonItem(image: #imageLiteral(resourceName: "icon_hamb").withRenderingMode(.alwaysTemplate), style: .plain, target: self, action: #selector(StorySelectCarouselVC.showMenu) )

я получаю сообщение об ошибке типа «Аргумент '#selector' относится к методу экземпляра 'showMenu()', который не доступен для Objective-C"


person Murat Yılmaz    schedule 02.02.2017    source источник


Ответы (1)


Вам нужно объявить свой метод showMenu доступным для Objective-C, добавив к нему префикс атрибута objc.

@objc func showMenu() {
    // ...
}
person hoshy    schedule 02.02.2017
comment
Когда я добавляю префикс @objc, я получаю следующую ошибку: @objc можно использовать только с членами классов, протоколами @objc и конкретными расширениями классов. - person Murat Yılmaz; 02.02.2017