【问题标题】:Calling protocol extension function from selector从选择器调用协议扩展函数
【发布时间】:2017-02-02 09:37:25
【问题描述】:

我有一个名为 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 类中的#selector 调用“showMenu”函数时

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

我收到一个错误,例如“'#selector' 的参数引用了未暴露给 Objective-C 的实例方法 'showMenu()'”

【问题讨论】:

    标签: swift swift3 protocols protocol-extension


    【解决方案1】:

    您需要声明您的 showMenu 方法可被 Objective-C 访问,方法是在其前面加上 objc 属性。

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

    【讨论】:

    • 当我添加“@objc”前缀时,我收到以下错误“@objc”只能用于类成员、“@objc”协议和类的具体扩展
    猜你喜欢
    • 1970-01-01
    • 2017-08-21
    • 2016-11-19
    • 2017-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-05
    • 1970-01-01
    相关资源
    最近更新 更多