ios - objective - the swift programming language pdf
Swift control de acceso con selectores de objetivos (1)
Echa un vistazo a este código de ejemplo:
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)
}
}
La acción de destino para UIButton
funciona bien siempre que Selector sea público o interno , pero si es privado , se bloquea debido a un selector no reconocido enviado a la instancia
¿Hay alguna manera de que pueda lograr esto? No quiero que la función de tap sea pública o interna.
necesitas @objc
para exponer un método privado a objc runtime
@objc private func buttonDidTap(button:UIButton!) {
println(button.char)
}
De las notas de la versión Xcode6 beta4
Las declaraciones marcadas como privadas no están expuestas al tiempo de ejecución de Objective-C si no están anotadas. Los puntos de venta de IB, las acciones de IB y las propiedades administradas de Datos centrales permanecen expuestos a Objective-C sea cual sea su nivel de acceso. Si necesita un método o propiedad privada para ser invocada desde Objective-C (como una API anterior que usa una devolución de llamada basada en selector), agregue el atributo @objc a la declaración explícitamente. !