使用目标select器进行快速访问控制

看看这个例子代码:

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) } } 

只要select器是公共内部的UIButton的目标行为就可以正常工作,但如果它是私有的 ,则由于无法识别的select器发送到实例而崩溃

有什么办法可以做到这一点? 我不想让tapfunction公开或内部。

你需要@objc来公开私有方法objc运行时

 @objc private func buttonDidTap(button:UIButton!) { println(button.char) } 

从Xcode6 beta4发行说明

如果没有其他注释,标记为private的声明不会暴露给Objective-C运行时。 不pipe他们的访问级别如何,IB网点,IB操作和Core Data托pipe属性都会暴露于Objective-C。 如果您需要从Objective-C调用私有方法或属性(例如,使用基于select器的callback的旧API),请将@objc属性明确添加到声明中。 !