看下面的示例代码:
class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let letterButton = UIButton.buttonWithType(.Custom) as UIButton self.view.addSubview(letterButton) letterButton.addTarget(self, action:Selector("buttonDidTap:"), forControlEvents: .TouchUpInside) } func buttonDidTap(button: UIButton!) { print(button.char) } }
UIButton只要Selector是 公共的 或 内部的 ,目标操作就可以正常工作,但是如果Selector是 私有的 ,则它会由于 无法识别的选择器发送到实例 而崩溃 __
UIButton
有什么办法可以实现?我不想公开水龙头功能或内部水龙头功能。
您需要@objc向objc运行时公开一个私有方法
@objc
@objc private func buttonDidTap(button:UIButton!) { println(button.char) }
从Xcode6 beta4发行说明
如果没有另外注释,标记为私有的声明不会暴露给Objective- C运行时。无论访问级别如何,IB出口,IB动作和核心数据管理的属性始终向Objective-C公开。如果需要可从Objective- C调用的私有方法或属性(例如,对于使用基于选择器的回调的较旧API),请在声明中显式添加@objc属性。!