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

我得到一个错误,比如“selector的参数引用了实例方法showmenu()”,它没有暴露给objective-c”

最佳答案

你需要用Objy-C来声明你的showMenu方法,它是用objc属性预先设置的。

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

关于swift - 从选择器调用协议(protocol)扩展功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41998656/

10-11 02:06