Swift 从选择器调用协议扩展函数

Swift 从选择器调用协议扩展函数,swift,swift3,protocols,protocol-extension,Swift,Swift3,Protocols,Protocol Extension,我有一个名为MenuDisplayable的协议类。这个协议有一个扩展 protocol MenuDisplayable {} extension MenuDisplayable where Self: UIViewController { func showMenu( ) { let storyboard = UIStoryboard(storyboard: .Menu) let menuVC = storyboard.instantiateInitialViewControll

我有一个名为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)
 }

}
当我从viewController类内的#选择器调用“showMenu”函数时

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

我得到了一个错误,如“参数“#选择器”引用了未向Objective-C公开的实例方法“showMenu()”

您需要声明您的
showMenu
方法,该方法可以通过使用
objc
属性作为前缀来访问Objective-C

@objc func showMenu() {
    // ...
}
当我添加“@objc”前缀时,我得到下面的错误“@objc”只能用于类的成员、“@objc”协议和类的具体扩展