2017-02-02 5 views
2

У меня есть класс протокола с именем 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()', который является не подвергается объективу-C "

ответ

0

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

@objc func showMenu() { 
    // ... 
} 
+0

Когда я добавить «@objc» префикс, я получаю ошибку ниже «@objc» могут быть использованы только с членами классов, «@objc» протоколов и конкретных расширений классов –